首页 > 编程知识 正文

顺序表的基本操作和实现,c语言顺序表的基本操作

时间:2023-05-03 17:18:34 阅读:199820 作者:166

(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 0typedef 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("%dn",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("%dn",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("%dn",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("%dn",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("%dn",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("%lfn",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; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。