定义顺序表,编写顺序表初始化函数、插入函数(在某个位置插入一个元素)、查找函数(按值查找)、删除函数(删除顺序表中某个位置上的元素)、输出函数(显示顺序表中每个元素)、主函数。
有关插入函数、查找函数、删除函数参数如下:
插入函数insertSeqList(SeqList *L,int i, dataType x);//在L中第i个位置插入x
查找函数searchSeqList(SeqList *L,dataType x);//查找x是否在L中,若有返回x在L中的位序,若没有返回0;
删除函数delSeqList(SeqList *L,int i);//删除L中第i个元素,并返回其值。
本函数支持
printf("\n输入你要选择的命令\n");
printf("1、展示一切信息\n");
printf("2、插入\n");
printf("3、销毁表\n");
printf("4、初始化表\n");
printf("5、查找信息\n");
printf("6、删除信息\n");
printf("7、退出\n");
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef int dataType;
typedef struct {
int data[100];//数据
int length;//长度
}SeqList;
SeqList *init();
void show(SeqList *L);
void insert(SeqList *L,int i,int e);
int delSeqList(SeqList *L,int i);
int searchSeqList(SeqList *L,dataType e);
int insertSeqList(SeqList *L,int i,dataType e);
void destorylist(SeqList *L);
void choose(SeqList *L);
void mingling(SeqList *L,int n);
/*详情介绍:想要一个新表的的操作如下
首先先销毁表,释放空间;
然后初始化表,申请空间;
接着插入数据,数据填充;
最后查看信息,数据展示;
*/
//主函数
int main(){
SeqList *L;
int e;
L=init();
//表中最初的内容
L->data[0]=10;
L->data[1]=20;
L->data[2]=30;
L->data[3]=40;
L->length=4;
show(L);
choose(L);
destorylist(L);
}
//初始化表格
SeqList *init()
{
SeqList *L;
//申请空间
L=(SeqList *)malloc(sizeof(SeqList));
//长度为0
L->length=0;
return L;
}
//展示表格
void show(SeqList *L)
{
int i;
//依次展示数组内容
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
}
//进行插入信息
void insert(SeqList *L,int i,int e)
{
int j;
//判断插入位置是否出错
if(i<1||i>L->length)
printf("插入出错\n");
i--;
for(j=L->length;j>i;j--)//将数组的位置全部往后移动一位,直到插入位置
L->data[j]=L->data[j-1];
L->data[i]=e;//目标位置插入相应的数据
L->length++;//长度加一
}
//进行查找信息
int searchSeqList(SeqList *L,dataType e)
{
int i=0;
//进行排查对应要查找的数据的位置
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;//0表示找不到
else return i+1;//返回它的位数
}
//销毁表
void destorylist(SeqList *L)
{
free(L);//释放空间
}
//选择
void choose(SeqList *L)
{
int n;
printf("\n输入你要选择的命令\n");
printf("1、展示一切信息\n");
printf("2、插入\n");
printf("3、销毁表\n");
printf("4、初始化表\n");
printf("5、查找信息\n");
printf("6、删除信息\n");
printf("7、退出\n");
scanf("%d",&n);
mingling(L,n);
}
//命令执行
void mingling(SeqList *L,int n)
{
int n1,i,flag;int e;
switch(n)
{
case 1: show(L);choose(L);break;
case 2:
{
printf("你想插入的位置 数据:\n");
scanf("%d %d",&i,&e);
insert(L,i,e);
show(L);
choose(L);
}break;
case 3:destorylist(L);choose(L);break;
case 4:init();choose(L);break;
case 5:
{
printf("你想查找的数据:\n");
scanf("%d",&e);
flag=searchSeqList(L,e);
if(flag==0)printf("未找到该信息\n");
else printf("找到该信息,信息为:%d位于表中第%d位\n",e,flag);
choose(L);
}break;
case 6:
{
printf("你想删除第几位的数据:\n");
scanf("%d",&i);
flag=delSeqList(L,i);
if(flag==-1)printf("未执行命令");
else printf("删除了第%d位信息\n被删除的第%d位上数据为%d",i,i,flag);
choose(L);
}break;
case 7:exit(0);break;
default: choose(L);break;
}
}
//删除第几位数据
int delSeqList(SeqList *L,int i)
{
int j,temp;
//判断输入的删除位数是否出错
if(i<1||i>L->length)
return -1;
//将位数调整为下标
i--;
//临时存储被删单元内容
temp=L->data[i];
//在对应的下标初,进行后续的数组前移
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
//长度减一
L->length--;
//返回被删的数据内容
return temp;
}
输入
看各位想法
插入输出
查找输出
删除输出
展示输出
如果要想新建表
想要一个新表的的操作如下
首先先销毁表,释放空间;
然后初始化表,申请空间;
接着插入数据,数据填充;
最后查看信息,数据展示;
类似
这里显示插入出错,是因为代码里面设置了插入位置大于length,便显示出错,而创建新表,length=0。不过并不影响输出。