数据结构-动态顺序表-C语言实现
标签:大于 while else 指定表 实现 etc def oid 保存
1 #include 2 #include 3 #include 4 #include 5 #define MAXSIZE 7
6 typedef int ElemType;
7 typedef struct OrderList{
8 ElemType * number;//大小可变的动态数组
9 ElemType length;//当前表的可插入的数据的位置
10 ElemType maxsize;//表的最大长度
11 }OrderList;
12 void init(OrderList *p,int size){//初始化,size为指定表最大长度
13 p->length=0;
14 if(size1){
15 printf("大小错误!\n");
16 return;
17 }
18 p->number=(ElemType *)malloc(size * sizeof(ElemType));//为number数组分配可存储size个ElemType数据的空间
19 p->maxsize=size;//更新表的最大长度
20 }
21 bool IfIn(OrderList *p,int val){//遍历查找是否已有该数据
22 for(int a=0;alength;a++)
23 if(p->number[a]==val)
24 return true;
25 return false;
26 }
27 void menu(){//打印菜单
28 printf("键入以下字符以操作,EOF退出\nA:添加数据\nB:查看数据\nC:插入数据\nD:按位置删除数据\nE:按值删除数据\n");
29 }
30 void AddData(OrderList *p,int d){//接收一个数值d以默认顺序添加数据
31 if(IfIn(p,d)){
32 printf("%d已存储!\n",d);
33 return;
34 }//如果已有该数据
35 int cur = p->length;//获取当前表的位置
36 if(p->length==p->maxsize&&d>=0){//如果最新可添加数据的位置下标正好等于最大长度
37 p->number=(ElemType *)realloc(p->number,p->length);//为number数组添加一个数据类型空间
38 p->length++;//位置+1
39 p->maxsize++;//最大长度+1
40 p->number[cur]=d;//获取数据
41 }
42 else {//如果当前表的位置尚未到达最大长度
43 p->number[cur]=d;//直接在最新的位置添加数据
44 p->length++;//位置+1
45 }
46 }
47 void CheckData(OrderList *p){//查看以录入数据
48 if(p->length)//如果已存入数据(则length>0)
49 for(int a=0;alength;a++)//打印数据
50 printf("第%d个数据:%d\n",a+1,p->number[a]);
51 else
52 printf("表为空!\n");
53 }
54 void InsertData(OrderList *p,int pos,int data){//接收一个要插入的pos位置和要插入的数据data
55 if(IfIn(p,data)){
56 printf("%d已存储!\n",data);
57 return;
58 }//如果已有该数据
59 if(pos>p->length){//插入位置与当前表的最大长度的关系
60 printf("插入位置超出当前表的可存储位置的!\n");
61 return;
62 }
63 for(int z=p->length;z>=pos;z--){//循环后移保存数据为插入的位置腾出空间
64 p->number[z]=p->number[z-1];
65 }
66 p->number[pos-1]=data;//获取数据
67 p->length++;//可添加数据位置的右移即+1
68 }
69 void DeleInpos(OrderList *p,int pos){//删除第pos个数据
70 if(pos>=p->length||pos0){//如果删除的位置大于等于可插入数据的空位置或位置无效
71 printf("删除位置错误!\n");
72 return;
73 }
74 for (int z =pos-1;zlength;z++)//将该位置上的值用后面的值覆盖
75 p->number[z]=p->number[z+1];
76 p->length--;//可插入数据的位置左移,-1
77 }
78 void DeleInVal(OrderList *p,int val){//按值删除
79 for(int a=0;alength;a++){//循环遍历整个表
80 if(p->number[a]==val)//如果该位置上的值等于指定删除的值
81 DeleInpos(p,a+1);//将该位置+1即表示第a+1个元素利用位置删除
82 }
83 }
84 int Getval(){//获取数据
85 int a;
86 printf("请输入数值:");
87 scanf("%d",&a);
88 return a;
89 }
90 int Getpos(){//获取位置
91 int a;
92 printf("请输入位置:");
93 scanf("%d",&a);
94 return a;
95 }
96 void main(void){
97 OrderList list;//顺序表结构
98 OrderList * p=&list;//指向表的指针以操作
99 init(p,3);//默认表可存储三个数据
100 char ch;
101 menu();//打印菜单
102 while((ch=getchar())!=EOF){//键入Ctrl+z时停止
103 setbuf(stdin,NULL);//清空缓冲区
104 switch (toupper(ch)){
105 case ‘A‘: AddData(p,Getval());break;//添加数据
106 case ‘B‘: CheckData(p);break;//查看数据
107 case ‘C‘: InsertData(p,Getpos(),Getval());break;//插入数据
108 case ‘D‘: DeleInpos(p,Getpos());break;//按pos位置删除
109 case ‘E‘: DeleInVal(p,Getval());break;//按值删除
110 }
111 setbuf(stdin,NULL);//清空缓冲区
112 menu();//打印菜单
113 }
114 }
数据结构-动态顺序表-C语言实现
标签:大于 while else 指定表 实现 etc def oid 保存
原文地址:https://www.cnblogs.com/Let-us-Coding/p/12916337.html
评论