顺序表(动态分配空间)

嗯,开始谢谢数据结构了。

不过,一直有个疑问,就是malloc分配空间,逻辑上是连续的,不知道物理空间是不是连续的;是否有大神帮着解答一下,不胜感谢!!

typedef int ElemType;

typedef struct seqlist
{
	ElemType *data;
	int length;
	int size;
}SeqList;

//初始化建表
SeqList *CreateList()
{
	SeqList *sq = (SeqList *)malloc(sizeof(SeqList));
	if(sq == NULL) exit(OVERFLOW);
	sq->data = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));
	if(sq->data == NULL) exit(OVERFLOW);
	sq->length = 0;
	sq->size = MAXSIZE;

	return sq;
}

//在表尾插入数据
void InsertAfter(SeqList *L,ElemType e)
{
	if (L->length >= L->size)
	{
		L->data = (ElemType *)realloc(L->data,(L->size + INCREMENT) * sizeof(ElemType));
		if(L->data == NULL) exit(OVERFLOW);
		L->size += INCREMENT;
	}
	L->data[L->length++] = e;
}
//在第index位置插入数据
bool InsertList(SeqList *L,int index,ElemType e)
{
	int i;
	if(index > L->size || index < 0) return false;

	if(L->length >= L->size)
	{
		L->data = (ElemType *)realloc(L->data,(L->size + INCREMENT) * sizeof(ElemType));
		if(L->data == NULL) exit(OVERFLOW);
		L->size += INCREMENT;
	}
	
	for (i = L->length; i>index;i--)
	{
		L->data[i] = L->data[i-1];
	}

	L->data[index] = e;

	L->length++;

	return true;
}

//在第index位置删除数据
bool DeleteList(SeqList *L,int index)
{
	int i;
	if(index > L->size || index < 0) return false;

	for(i = index; i < L->length-1;i++)
	{
		L->data[i] = L->data[i+1];
	}
	L->length--;
	return true;
}

//找出数据e的索引
int FindList(SeqList *L,ElemType e)
{
	int count = 0;

	while (count < L->length && L->data[count] != e)count++;
	
	if (count >= L->length) return OVERFLOW;
	else return count;

}

//表是否为空
bool isEmpty(SeqList *L)
{
	return (L->length == 0);
}

//表是否满了
bool isFull(SeqList *L)
{
	return (L->length == L->size);
}

//遍历表
void showList(SeqList *L)
{
	int i;
	for (i = 0; i < L->length; i++)
	{
		printf("%d ",L->data[i]);
	}
	printf("\n");
}

测试索引从0开始的。

int _tmain(int argc, _TCHAR* argv[])
{
	SeqList *L = CreateList();
	
	int i;
	for (i = 1;i < 10;i++)InsertAfter(L,i);
	
	printf("新建表,插入9个元素:");
	showList(L);
	
	printf("在第3个位置插入100:");
	InsertList(L,2,100);
	showList(L);

	printf("将第5个位置的数据删除:");
	DeleteList(L,4);
	showList(L);

	printf("数据8的位置是:%d",FindList(L,8));
	
	return 0;
}

测试是通过的,若是有什么不足的地方,希望大家能指点一下我,共同进步。


你可能感兴趣的:(数据结构)