★C语言实现静态顺序表的增删改查


#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
#define Max_size 10
typedef int Datatype;
typedef struct Seqlist
{
Datatype arr[Max_size];
size_t size;
Datatype x;
}Seqlist;


//初始化操作
void init(Seqlist* ptr)
{
assert(ptr);
memset(ptr->arr, 0, sizeof(Datatype)*Max_size);
ptr->size = 0;
}



//尾插
void pushback(Seqlist* ptr,Datatype x)
{
assert(ptr);
if (ptr->size >= Max_size)
{
printf("Seqlist is full!\n");
return;
}
ptr->arr[ptr->size++] = x;
}


//尾删
void popback(Seqlist* ptr)
{
assert(ptr);
if (ptr->size <= 0)
{
printf("Seqlist is empty!\n");
return;
}
--ptr->size;
}


//头插
void pushfront(Seqlist* ptr,Datatype x)
{
assert(ptr);
int begin = ptr->size - 1;
if (ptr->size >= Max_size)
{
printf("Seqlist is full!\n");
return;
}
ptr->size++;    //顺序表空间自增,前一数据元素覆盖后一元素位置,将X存入首位置
for (; begin >= 0; begin--)
{
ptr->arr[begin+1] = ptr->arr[begin];
}
ptr->arr[0] = x;
}


//头删
void popfront(Seqlist* ptr)
{
assert(ptr);
size_t begin = 0;
if (ptr->size <= 0)
{
printf("Seqlist is empty!\n");
return;
}
for (begin = 0; begin < ptr->size; begin++)
{
ptr->arr[begin] = ptr->arr[begin + 1];
}            //后一元素覆盖前一元素,最后顺序表空间减一
--ptr->size;
}


//查找某一元素
int find_one(Seqlist* ptr,Datatype x)
{
assert(ptr);
size_t i = 0;
for (; i < ptr->size; i++)
{
if (ptr->arr[i] == x)
{
return i;
}
}
return -1;
}



//删除指定位置元素
void Erase(Seqlist* ptr,size_t pos)
{
assert(ptr);
size_t begin = 0;
if (ptr->size <= 0)
{
printf("Seqlist is empty!\n");
return;
}
begin = pos - 1;    //从pos位置后一元素覆盖前一元素位置,顺序表空间减一
for (; begin < ptr->size; begin++)
{
ptr->arr[begin] = ptr->arr[begin + 1];
}
--ptr->size;
}


//任意位置插入元素
void Insert(Seqlist* ptr,size_t pos, Datatype x)
{
assert(ptr);
assert(pos);
size_t end = ptr->size++;
if (ptr->size >= Max_size)
{
printf("Seqlist is full!\n");
return;
}
if (pos>ptr->size)
{
printf("非法插入!\n");
return;
}
for (; end >= pos - 1; end--)
{
ptr->arr[end] = ptr->arr[end - 1];
}
ptr->arr[pos - 1] = x;
}


//打印顺序表
void showdata(Seqlist* ptr)
{
assert(ptr);
if (ptr->size == 0)
{
printf("Seqlist is empty!\n");
return;
}
for (size_t i = 0; i < ptr->size; i++)
{
printf("%d ", ptr->arr[i]);
}
printf("\n");
}


//主函数
int main()
{
Seqlist seq;
init(&seq);
/*pushback(&seq, 1);
popback(&seq);
pushfront(&seq, 2);*/
pushback(&seq, 1);
pushback(&seq, 2);
pushback(&seq, 3);
pushback(&seq, 4);
pushback(&seq, 5);
pushback(&seq, 6);
pushback(&seq, 7);
pushback(&seq, 8);
popfront(&seq);
showdata(&seq);
int ret = find_one(&seq, 3);
printf("%d\n", ret);
Erase(&seq, 2);
showdata(&seq);
Insert(&seq, 2, 5);
showdata(&seq);
return 0;
}