顺序表的概念
顺序表是指用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。
顺序表一般可分为静态顺序表(使用定长数组存储)和动态顺序表(使用动态开辟的数组存储),这里我们只为大家分享动态顺序表的创建以及相关操作。
1.顺序表的静态存储:
#define N 100
typedef int ElemType;
typedef struct Seqlist
{
ElemType array[N];//定长数组
size_t size; //有效的数据个数
}Seqlist;
2.顺序表的动态存储
typedef int ElemType;
typedef struct SeqList
{
ElemType * array;//指向动态开辟的数组
size_t size; //有效数据个数
size_t capacity;//容量空间大小
}SeqList;
定义顺序表的结构
#define ElemType int // 定义元素类型
#define SEQLIST_SIZE 8 //顺序表默认大小
//定义顺序表的结构
typedef struct SeqList
{
ElemType *base;
size_t capacity;
rsize_t szie;
}SeqList;
基本操作
初始化顺序表
void SeqListInit(SeqList *plist)
{
plist->capacity = SEQLIST_SIZE;
plist->base =(ElemType*)malloc(sizeof(ElemType)*plist->capacity);
plist->szie = 0;
}
尾部插入元素
void SeqListPushBack(SeqList *plist, ElemType x)
{
assert(plist!=NULL);
if (IsFull(plist))
{
printf("空间已满,%d不能插入\n", x);
return;
}
plist->base[plist->szie++] = x;
}
头部插入元素
void SeqListPushFront(SeqList *plist, ElemType x)
{
assert(plist != NULL);
if (IsFull(plist))
{
printf("顺序表已满,%d不能插入!\n", x);
return;
}
for (size_t i = plist->szie; i > 0; i--)
{
plist->base[i] = plist->base[i - 1];
}
plist->base[0] = x;
plist->szie++;
}
尾部删除元素
void SeqListPopBack(SeqList *plist)
{
assert(plist != NULL);
if (Isempty(plist))
{
printf("顺序表已空,不能尾部删除!\n");
}
plist->base[plist->szie--];
}
头部删除元素
void SeqListPopfront(SeqList *plist)
{
assert(plist != NULL);
if (Isempty(plist))
{
printf("顺序表已空,不能头部删除!\n");
}
for (size_t i = 0; i < plist->szie; i++)
{
plist->base[i] = plist->base[i + 1];
}
plist->szie--;
}
打印顺序表的元素
void SeqListDisplay(SeqList *plist)
{
assert(plist != NULL);
for (size_t i = 0; i < plist-