顺序表固定大小,不能随着数据的增多而增大、受到栈空间的限制,可以用realloc函数扩容。
优点:易于查询,索引快
1.顺序表的内存空间连续。
2.尾插、尾删效率较高,时间复杂度是O(1)。
3.支持随机访问,可以高效的按下标进行操作,时间复杂度是O(1)。
缺点:扩展性弱,不易删除、添加。
1.在顺序表中间插入或删除元素时都涉及到元素的移动,效率较低,时间复杂度为O(N)。
2.顺序表长度固定,有时需要扩容。
注:以下代码根据参考直接手打,可能有手误,基本没有大问题。
顺序表代码参考B站博主:图图讲编程
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include<string.h>
#define SEQ_INIT_SIZE 10
#define SEQ_INC_SIZE 2
typedef int ElemType
typedef struct
{
ElemType data;
int cursize;//元素个数
int capacity;//容量
}SeqList;
void InitSeqList(SeqList *plist)
{
assert(plist != NULL);
plist->capacity = SEQ_INIT_SIZE;
plist->cuisize=0;
plist->data = (ElemType*)malloc(sizeof(ElemType)*plist->capacity);
if(NULL == plist->data)
{
printf("\n");
exit(EXIT_FALURE);
}
}
int GetSize(SeqList *plist)
{
assert(plist!=NULL);
return plist->cursize;
}
bool IsEmpty(SeqList *plist)
{
return GetSize(plist) == 0;
}
bool IsFull(SeqList *plist)
{
return GetSize(plist) == plist->capacity;
}
int GetCapacity(SeqList *plist)
{
assert(plist != NULL);
return plist->capacity;
}
void PrintSeqList(SeqList *plist)
{
assert(plist != NULL);
for(int i=0; i < plist->cursize; ++i)
{
printf(%5d",plist->data[i]);
}
printf("\n");
}
int FindValue(SeqList *plist,ElemType val)
{
assert(plist!=NULL);
int pos = plist->cursize - 1;
while(pos >= 0 && plist->data[pos] != val)
{
--pos;
}
return pos;
/*
assert(plist!=NULL);
int pos=-1;
for(int i=0;i<plist->cursize;++i)
{
if(val == plist->data[i])