码迷,mamicode.com
首页 > 其他好文 > 详细

动态顺序表

时间:2016-03-23 06:47:31      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:capacity   include   动态   

动态顺序表的初始化及增删查改

#pragma once
#include<iostream>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
typedef int DataType;
typedef struct SeqList
{
	DataType* _array;
	size_t _size;
	size_t _capacity;
}SeqList;
void InitSeqList(SeqList *pSeq)
{
	assert(pSeq);
	pSeq->_capacity=10;
	pSeq->_array=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
	pSeq->_size=0;
}
void PrintSeqList(SeqList *pSeq)
{
	int i=0;
	assert(pSeq);
	for(;(size_t)i<pSeq->_size;i++)
	{
		printf("%d ",pSeq->_array[i]);
	}
	printf("\n");
}
void PushBack(SeqList *pSeq, DataType x)
{
	DataType* tmp;
	assert(pSeq);
	if(pSeq->_size>=pSeq->_capacity)
	{
		pSeq->_capacity *=2;
		tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
		memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
		free(pSeq->_array);
		pSeq->_array=tmp;
	}
	else
	{
		pSeq->_array[pSeq->_size++]=x;
	}
}
void Popback(SeqList* pSeq)
{
	assert(pSeq);
	if(pSeq->_size==0)
	{
		printf("SeqList is empty!\n");
		return;
	}
	else
	{
		//pSeq->_array[--pSeq->_size]=0;//和[--pSeq->_size]有什么区别
		pSeq->_size--;
	}
}
void PushFront(SeqList *pSeq,DataType x)
{
	DataType* tmp;
	int i;
	assert(pSeq);
	if(pSeq->_size>=pSeq->_capacity)
	{
		pSeq->_capacity *=2;
		tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
		memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
		free(pSeq->_array);
		pSeq->_array=tmp;
	}
	else
	{
		for(i=pSeq->_size;i>0;i--)
		{
			pSeq->_array[i]=pSeq->_array[i-1];
		}
		pSeq->_array[i]=x;
		pSeq->_size++;
	}
}
void PopFront(SeqList*pSeq)
{
	int i;
	assert(pSeq);
	if(pSeq->_size==0)
	{
		printf("SeqList is null!");
		return;
	}
	else
	{
		for(i=0;i<pSeq->_size;i++)
		{
			pSeq->_array[i]=pSeq->_array[i+1];
	    }
		pSeq->_size--;
	}
}
void Insert(SeqList *pSeq,size_t pos,DataType x)
{
	size_t i;
	DataType* tmp;
	assert(pSeq);
	if(pSeq->_size>=pSeq->_capacity)
	{
		pSeq->_capacity *=2;
		tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
		memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
		free(pSeq->_array);
		pSeq->_array=tmp;
	}
	else
	{
		for(i=pSeq->_size;i>=pos;i--)
		{
			pSeq->_array[i+1]=pSeq->_array[i];
		}
		pSeq->_array[pos]=x;
		pSeq->_size++;
	}
}
void Erase(SeqList *pSeq,size_t pos)//删掉某一位置的元素
{
	size_t i;
	assert(pSeq);
	if(pos>pSeq->_size)
	{
		printf("Seqlist is not exist!");
	}
	else
	{
		for(i=pos;i<pSeq->_size;i++)
	    {
			pSeq->_array[i-1]=pSeq->_array[i];//换成这个为什么不行 pSeq->_array[i]=pSeq->_array[i+1];
		}
		pSeq->_size--;
	}
}
int Find(SeqList *pSeq,DataType x)
{
	int i;
	assert(pSeq);
	for(i=0;i<=pSeq->_size;i++)
	{
		if(x==pSeq->_array[i])
		{
			return i;
		}
		else
		{
			return -1;
		}
	}
}
void Remove(SeqList *pSeq,DataType x)
{
	int i,ret;
	assert(pSeq);
	ret=Find(pSeq,x);
	if(ret==-1)
	{
		printf("SeqList is not exist!\n");
	}
	else
	{
		for(i=ret;i<pSeq->_size;i++)
		{
			pSeq->_array[i]=pSeq->_array[i+1];
		}
		pSeq->_size--;
	}
}
void RemoveAll(SeqList *pSeq,DataType x)
{
	size_t FirstIndex=0;
	size_t SecondIndex=0;
	size_t count=0;
	assert(pSeq);
	while(FirstIndex<pSeq->_size)
	{
		if(pSeq->_array[FirstIndex]==x)
		{
			count++;
		}
		else
		{
			pSeq->_array[SecondIndex]=pSeq->_array[FirstIndex];
			SecondIndex++;
		}
		FirstIndex++;
	}
	pSeq->_size=count;
}
void Modify(SeqList *pSeq,size_t pos,DataType x)
{
	assert(pSeq);
	pSeq->_array[pos]=x;	
}


本文出自 “sunshine225” 博客,请务必保留此出处http://10707460.blog.51cto.com/10697460/1754046

动态顺序表

标签:capacity   include   动态   

原文地址:http://10707460.blog.51cto.com/10697460/1754046

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!