赞
踩
(1) 从键盘上依次输入21、18、30、75、42、55、99、35、40,创建顺序表,并输出顺序表中的各元素值(自己编写)
(2) 分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值(参考代码)
(3) 查找值为10的元素,找到返回其位序,否则返回0(自己编写)
(4) 查找顺序表中的最大元素值并输出(自己编写)
(5) 对顺序表元素进行就地逆置并输出(自己编写)
(6) 删除顺序表中的第4个数据元素和第7个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值(参考代码)
(7) 求顺序表中所有元素的平均值并输出(自己编写)
(8) 先清空顺序表,然后销毁顺序表(自己编写)
思考:如果插入、删除元素的位置是随机输入的,待插入的元素也是随机输入的,程序可以怎么改?
- #include<stdio.h>
- #include<malloc.h>
- #include<stdlib.h>
- #define ok 1
- #define error 0
- typedef struct
- {
-
- int a[100];
- int length;
- }sqlist,*p;
- p creatlist();
- int ListDelete(p,int);
- void ListInsert(p,int,int);
- int LocateElem(p,int);
- int MAX(p);
- void oppsite(p);
- void average(p);
- void Clearlist(p);
- int DestroyList(p);
- int main ()
- { int e;
- int i;
- int j;
- int i1;
- int j3;
- p top;
- int s;
- int j1;
- int j2;
- top=creatlist();
- printf("请输入要在哪个位置插入第一个数(以XX,XX格式输入):");
- scanf("%d",&i1);
- scanf("%d",&j3);
- ListInsert(top, i1, j3);
- printf("请输入要在哪个位置插入第二个数(以XX,XX格式输入):");
- scanf("%d",&i);
- scanf("%d",&j);
- ListInsert(top, i, j);
- printf("请输入要查找的元素");
- scanf("%d",&e);
- s=LocateElem(top,e);
- if(s!=0)
- {printf("查找元素的值位置为:");
- printf("%d",s);
- }
- else
- printf("该元素不存在查找失败");
- int y=MAX(top);
- printf("最大元素为:");
- printf("%d\n",y);
- oppsite(top);
- printf("请输入第一个要删除元素的位置");
- scanf("%d",&j1);
- int k=ListDelete(top,j1);
- if(k)
- printf("删除元素成功");
- else
- printf("删除元素失败");
- printf("请输入第二个要删除元素的位置");
- scanf("%d",&j2);
- int k1=ListDelete(top,j2);
- if(k1)
- printf("删除元素成功");
- else
- printf("删除元素失败");
- average(top);
- Clearlist(top);
- DestroyList(top);
- }
-
- p creatlist()
- {
- p d;
- int k;
- d=(p)(malloc(sizeof(sqlist)));
- printf("你想要从键盘上输入几个数");
- scanf("%d",&d->length);
- if(d->length<=0)
- {printf("你输入了负数或者0");
- exit(-1);
- }
- for(k=0;k<d->length;k++)
- {
- printf("请输入第%d个数,按回车结束: ",k+1);
- scanf("%d",&d->a[k]);
- }
- for(k=0;k<d->length;k++)
- {
- printf("第%d个数是",k+1);
- printf("%d\n",d->a[k]);
- }
- printf("\n");
- return d;
- }
- void ListInsert(p top,int i,int j)
- {
- if(top->length<=0)
- {
- printf("输入失败,长度不够");
- exit(-1);
- }
- if(top->length>=100)
- {
- printf("插入失败,数目过溢");
- exit(-1);
- }
- if(i>top->length)
- {
- printf("插入位置大于数组的最大长度");
- exit(-1);
- }
- if(i<0)
- {
- printf("插入位置有误");
- exit(-1);
- }
- int k;
- for(k=top->length-1;k>=i;k--)
- top->a[k+1]=top->a[k];
- top->a[i]=j;
- ++top->length;
- for(k=0;k<top->length;k++)
- {
- printf("输出第%d个数是:",k+1);
- printf("%d\n",top->a[k]);
- }
- printf("输入成功\n");
- }
- int LocateElem(p top,int e)
- {
- int t=0;
- for(;t<top->length;t++)
- if(e==top->a[t])
- return t+1;
- if(top->length==t)
- return error;
- }
- int MAX(p top)
- { int max=top->a[0];
- for(int r=1;r<top->length;r++)
- if(max<top->a[r])
- max=top->a[r];
- return max;
- }
- void oppsite(p top)
- {
- int b;
- for(int k=0;k<(top->length/2);k++)
- {b=top->a[k];
- top->a[k]=top->a[top->length-1-k];
- top->a[top->length-1-k]=b;
- }
- printf("逆序后的元素为\n");
- for(int t=0;t<top->length;t++)
- printf("%d\n",top->a[t]);
- }
- int ListDelete(p top,int i)
- {
- if(i>top->length||i<1)
- {printf("删除位置不对,删除失败");
- return error;
- exit(-1);
- }
- else
- {
- int b;
- for(int j=1;j<=top->length;j++)
- {
- b=top->a[i-1];
- if(j==i&&i<top->length)
- {
- for(;j<top->length;j++)
- top->a[j-1]=top->a[j];
- --top->length;
- printf("删除后的剩余元素是:\n");
- for(int j=0;j<top->length;j++)
- printf("%d\n",top->a[j]);
- return ok;
- }
- }
- }
- }
- void average(p top)
- {
- double s=0;
- for(int j=0;j<top->length;j++)
- //printf("%d",top->a[j]);
- s+=top->a[j];
- printf("%lf",s);
- double b=s/10;
- printf("顺序表中所有元素的平均数是:");
- printf("%lf\n",b);
- }
- void Clearlist(p top)
- {
- for(int i=0;i<top->length;i++)
- top->a[i]=NULL;
- printf("清除顺序表元素成功");
- }
-
- int DestroyList(p top)
- {
- free(top); /*释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数,使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
- */
- printf("\n");
- printf("该线性表已经被销毁");
- exit(-1);
- return error;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。