/*顺序表的插入和删除*/
#include<stdio.h>
#include<stdlib.h>
#define Max 20
/*用typedef声明新类型名sequencelist,代表一个结构体类型,可用新类型名去定义变量
* 命名一个新的类型名sequencelist来代表结构体类型*/
typedef struct {
int a[Max];//线性表占用的数组最大空间
int last;//记录线性表最后一个元素的位置
}sequencelist;
int insert(sequencelist *Q, int i, int p)/*将Q定义成指向sequencelist类型的指针变量,在顺序表Q中的第i个元素之前插入p,i~【1,last+2】*/
{
int k;
if ((i < 1) || (i > Q->last + 2))
{
printf("error!");
return 0;
}
if (Q->last >= Max - 1)
{
printf("max to no insert");
return 0;
}
for (k = Q->last; k >= i - 1; k--)
Q->a[k + 1] = Q->a[k];
Q->a[i - 1] = p;
Q->last++;
printf("insert success!");
return 1;
}
int del(sequencelist *Q,int i)
{
int k;
if((i<1)||(i>Q->last-1))
printf("error!");
else{
for (k=i;k<=Q->last;k++)
{
Q->a[k-1]=Q->a[k];
}
}
Q->last--;
printf("delete to success!");
return 1;
}
void print(sequencelist *Q){
int i;
for (i = 0; i <10; i++)
{
printf("%3d", Q->a[i]);
}
printf("\n");
}
int main(void){
int i;
sequencelist *Q;//定义指向结构体类型sequencelist的指针Q
Q = (sequencelist*)malloc(sizeof(sequencelist*)*100);//开辟sizeof(sequencelist*)*100字节的临时分配域,函数值为其第一个字节的地址,并赋值给指针变量Q
Q->last = -1;//空表表长置为-1
printf("insert and delete to sequencelist:");
for (i = 0; i <10; i++)
{
Q->a[i] = i;
Q->last++;
printf("%2d", Q->a[i]);
}
printf("\n");
printf("Q->last:%d",(*Q).last);
printf("\n");
insert(Q, Q->last / 3, 12);
print(Q);
del(Q,5);
print(Q);
return 0;
}
调试结果
insert and delete to sequencelist: 0 1 2 3 4 5 6 7 8 9
Q->last:9
insert success! 0 1 12 2 3 4 5 6 7 8
delete to success! 0 1 12 2 4 5 6 7 8 9