1.固定大小顺序表的缺陷
#define seq_init_size 10
typedef int elemtype;
typedef struct
{
elemtype data[seq_init_size];
int cursize;
}seqlist;
int main()
{
seqlist myseq = {};
return 0;
}
开辟的空间是一个定值,无法根据存放的数据变化。受到栈空间的限制,无法突破一定的大小。
2.设计可变大小的顺序表
#define seq_init_size 10
#define seq_inc_size 2
typedef int elemtype;
typedef struct
{
elemtype* data;
int capacity;//容量
int cursize;//元素的个数
}seqlist;
void Initseqlist(seqlist *plist)
{
assert(plist != 0);
plist->capacity = seq_init_size;
plist->cursize = 0;
plist->data = (elemtype*)malloc(sizeof(elemtype) * plist->capacity);
if (NULL == plist->data)
{
printf("申请失败\n");
exit(EXIT_FAILURE);
}
}
int main()
{
seqlist myseq = {};
Initseqlist(&myseq);
return 0;
}
3.顺序表的初始化
assert(plist != 0);
plist->capacity = seq_init_size;
plist->cursize = 0;
plist->data = (elemtype*)malloc(sizeof(elemtype) * plist->capacity);
4.顺序表的打印和查询
打印
void PrintSeqlist(const seqlist *plist)
{
assert(plist != NULL);
for (int i = 0; i < plist->cursize; i++)
{
printf("%d", plist->data[i]);
}
printf("\n");
}
查询
int Findvalue(const seqlist* plist,elemtype val)
{
assert(plist != NULL);
if (plist == NULL)
{
return false;
}
int pos = -1;
for (int i = 0; i < plist->cursize; i++)
{
if (val == plist->data[i])
{
pos = i;
break;
}
}
return pos;
}