您好,欢迎访问三七文档
题目:可变长顺序表设计基本要求:(1)使用动态数组结构。(2)顺序表的操作包括:初始化、求数据元素个数、插入、删除、取数据元素,编写每个操作的函数。(3)设计一个测试主函数。测试数据:以用户随机输入的元素为原始数据。算法思想:可变长顺序表的设计,主要是利用动态数组结构的设计方法。动态数组是指用动态内存分配方法定义的数组,他中的元素的个数是在用户申请动态数组空间时才确定的。此外,用键盘输入顺序表的元素,进行建立顺序表。依次调用初始化、求数据元素个数,插入、删除和取数据元素并输出新的顺序表。模块划分:Main.c文件。Main.c文件包括以下函数。包括:初始化,求数据元素个数,插入,删除,取数据元素。voidInitiate(SeqList*s,intmax)函数:其功能是用于顺序表的初始化。intListLength(SeqList*L)函数:其功能是用于求顺序表的数据元素个数。intInsert(SeqList*s)函数:其功能是用于顺序表的插入。intDelete(SeqList*s)函数:其功能是用于顺序表的删除。intgetdata(SeqList*s)函数:其功能是用于函数的获取元素voidmain()函数:主函数。其功能建立顺序表并调用以上函数实现问题要求。数据结构:1.顺序表结构体定义:typedefstruct{int*str;intLength;}SeqList;2.动态数组动态申请空间:s-str=(int*)malloc(sizeof(int)*max);源程序:#includestdio.h#includemalloc.h#includestdlib.htypedefstruct{int*str;intLength;}SeqList;voidmain(){voidInitiate(SeqList*s,intmax);//函数声明intListLength(SeqList*s);intInsert(SeqList*s);intDelete(SeqList*s);intgetdata(SeqList*s);voidprint(SeqList*s,int);SeqListL;intx,max;printf(************可变长顺序表设计*************\n);printf(\n请输入所创建顺序表的长度:);scanf(%d,&max);printf(请输入创建的顺序表的值:);Initiate(&L,max);printf(\n);leep:printf(\n***1.数据元素个数***\n);printf(***2.数据元素插入***\n);printf(***3.数据元素删除***\n);printf(***4.取数据元素***\n);printf(***0.退出***);printf(\n***输入序号选择程序功能:\n);scanf(%d,&x);if(x==1){printf(\n数据元素个数是:%d\n,ListLength(&L));gotoleep;}if(x==2){Insert(&L);gotoleep;}if(x==3){Delete(&L);gotoleep;}if(x==4){getdata(&L);gotoleep;}if(x==0)printf(\n谢谢使用!\n);}voidInitiate(SeqList*s,intmax)//初始化顺序表{inti,x;s-str=(int*)malloc(sizeof(int)*max);//动态申请空间s-Length=max;for(i=0;imax;i++){scanf(%d,&x);s-str[i]=x;}}intListLength(SeqList*L){returnL-Length;}intInsert(SeqList*s){inti,j,x;printf(\n请输入要插入的位置及数据:);scanf(%d%d,&j,&x);if(j0){printf(参数不合法!\n);return0;}else{realloc(s-str,(s-Length+1)*sizeof(int));//新结点申请空间for(i=s-Length-1;i=j-1;i--){s-str[i+1]=s-str[i];}s-str[j-1]=x;s-Length++;printf(新的顺序表是:);for(i=0;is-Length;i++)printf(%d,s-str[i]);printf(\n);return1;}}voidprint(SeqList*s,intmax){inti;for(i=0;imax;i++){printf(%d,s-str[i]);}}intDelete(SeqList*s){inti,j,x;printf(\n请输入要删除数据的位置:);scanf(%d,&j);if(j0||js-Length){printf(参数不合法!\n);return0;}x=s-str[j-1];for(i=j;is-Length;i++){s-str[i-1]=s-str[i];}s-Length--;printf(删除的数据为:%d\n,x);printf(新的顺序表为:);for(i=0;is-Length;i++)printf(%d,s-str[i]);printf(\n);return1;}intgetdata(SeqList*s){intj,x;printf(\n请输入要获取元素的位置:);scanf(%d,&j);if(j0||js-Length){printf(参数不合法!\n);return0;}else{x=s-str[j-1];printf(获取的元素为:%d\n,x);return1;}}测试情况:(1)程序运行输出为:(2)测试结果分析:程序运行结果和人工模拟分析结果完全相同,说明程序设计正确
本文标题:可变长顺序表设计
链接地址:https://www.777doc.com/doc-5230394 .html