临近考研,正在复习数据结构部分,为加深记忆和理解,故实现书中部分知识的代码。
代码在指定位置插入有时会触发不能顺利插入的BUG,重复依次操作正常,由于时间关系,暂且不表。
参考书目:《数据结构》 人民邮电出版社。
`完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef struct{
int a[MAXSIZE];
int size;
}sequence_list;
//初始化函数
void init(sequence_list *slt)
{
slt->size = 0;
printf("初始化完毕\n");
}
//后插函数
void append(sequence_list *slt)
{
int a;
if(slt->size == MAXSIZE)
{
printf("顺序表已满!\n");
//exit(1);
return;
}
printf("请输入需要插入的数字\n");
scanf("%d",&a);
slt->a[slt->size] = a;
slt->size = slt->size++;
}
//打印顺序表结点值
void display(sequence_list *slt)
{
if(slt->size == 0)
printf("顺序表是空的!\n");
else
for(int i=0;i < slt->size; i++)
printf("%d->",slt->a[i]);
printf("NULL\n");
}
//判断顺序表是否为空
void empty(sequence_list *slt)
{
if(slt->size == 0)
printf("顺序表为空!\n");
else
printf("顺序表不为空\n");
}
//查找位置为x的节点值
void find(sequence_list *slt)
{
int i;
printf("请输入下标\n");
scanf("%d",&i);
if(i > slt->size - 1)
printf("超出表范围\n");
else
printf("该下标对应的值\n");
printf("%d\n",slt->a[i]);
}
//查找值为x的值的下标
void get(sequence_list *slt)
{
int i;
printf("请输入需要查找的数字\n");
scanf("%d",&i);
for(int n = 0;n < slt->size; n ++)
{
if(slt->a[n] == i)
printf("下标为%d\n",n);
else
printf("没有对应值\n");
}
}
//顺序表的指定位置插入
void insert(sequence_list *slt)
{
int position,n;
int i = slt->size;
printf("请输入需要插入数字的下标和值\n");
scanf("%d %d",&position,&n);
if(position < 0||position > slt->size)
{
printf("超出顺序表范围\n");
//exit(1);
return;
}
if(position == MAXSIZE)
{
printf("顺序表已满\n");
printf("%d\n",slt->size);
//exit(1);
return;
}
while(i > position)
{
slt->a[i] = slt->a[i-1];
i--;
}
slt->a[i] = n;
slt->size++;
printf("处理完的顺序表为\n");
display(slt);
}
//
void deleted(sequence_list *slt)
{
int position,i;
printf("请输入需要删除的数字\n");
scanf("%d",&position);
i = position;
if(position < 0||position > slt->size||position == MAXSIZE)
{
printf("超出顺序表范围\n");
exit(1);
}
while(i < slt->size-1)
{
slt->a[i] = slt->a[i+1];
i++;
}
printf("处理完的顺序表为\n");
display(slt);
}
int main()
{
sequence_list *slt = (sequence_list *)malloc(sizeof(sequence_list));
int n;
/****************************************/
printf("选择下列操作\n");
printf("1.初始化置空表\n");
printf("2.后插操作\n");
printf("3.打印顺序表\n");
printf("4.判断是否是空\n");
printf("5.查找对应下标的值\n");
printf("6.查找对应值的下标\n");
printf("7.指定位置的插入\n");
printf("8.指定位置的删除\n");
/****************************************/
while(1)
{
printf("请输入操作序号\n");
scanf("%d",&n);
switch(n){
case 1:init(slt);break;
case 2:append(slt);break;
case 3:display(slt);break;
case 4:empty(slt);break;
case 5:find(slt);break;
case 6:get(slt);break;
case 7:insert(slt);break;
case 8:deleted(slt);break;
default:printf("请输入正确的操作序列号\n");
}
}
return 0;
}