标签:大于 while else 指定表 实现 etc def oid 保存
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <ctype.h> 4 #include <stdbool.h> 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(size<1){ 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;a<p->length;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;a<p->length;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||pos<=0){//如果删除的位置大于等于可插入数据的空位置或位置无效 71 printf("删除位置错误!\n"); 72 return; 73 } 74 for (int z =pos-1;z<p->length;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;a<p->length;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 }
标签:大于 while else 指定表 实现 etc def oid 保存
原文地址:https://www.cnblogs.com/Let-us-Coding/p/12916337.html