当前位置:文档之家› 顺序表实验报告

顺序表实验报告

《数据结构》实验报告一系别:嵌入式系统工程系班级:嵌入式11003班学号:11160400314 姓名:xxx日期:2012年4月9日指导教师XX一、上机实验的问题和要求:顺序表的查找、插入与删除。

设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。

具体实现要求:1.从键盘输入10个整数,产生顺序表,并输入结点值。

2.从键盘输入1个整数,在顺序表中查找该结点的位置。

若找到,输出结点的位置;若找不到,则显示“找不到”。

3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。

4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)创建一个顺序表,实现对顺序表的插入,查找,删除等功能。

三、源程序及注释:#include <stdio.h>/*顺序表的定义:*/#define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct{ DataType data[ListSize]; /*向量data用于存放表结点*/int length; /*当前的表长度*/}SeqList;/*子函数的声明*/void CreateList(SeqList * L,int n); /*创建顺序表函数*/int LocateList(SeqList L,DataType x); /*查找顺序表*/void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/void main(){SeqList L;int n=10,x,i; /*欲建立的顺序表长度*/L.length=0;/*调用创建线性表函数*/printf(“create function:\n”);CreateList(&L,n); /*建立顺序表*/PrintList(L,n); /*打印顺序表*//*调用查找函数*/printf(“search function:\n”);printf("input the data you want to search:");scanf("%d",&x);i=LocateList(L,x); /*顺序表查找*/if (i==0)printf("sorry,don't find %d!\n\n",x);elseprintf("i have find the %d,it locate in %d!\n\n",x,i);/*调用插入函数*/printf(“Insert function:\n”);printf("输入要插入的位置:(input the position:)");scanf("%d",&i);printf("输入要插入的元素:(input the data:)");scanf("%d",&x);InsertList(&L,x,i); /*顺序表插入 */PrintList(L,n); /*打印顺序表 *//*调用删除函数*/printf(“delete function:\n”);printf("输入要删除的位置:(input the position:)");scanf("%d",&i);DeleteList(&L,i); /*顺序表删除 */PrintList(L,n); /*打印顺序表 */}/*顺序表的建立:*/void CreateList(SeqList *L,int n){ int i;for (i=0;i<n;i++){printf("\ninput the %d data:",i+1);scanf("%d",&(*L).data[i]);}(*L).length=n;}/*顺序表的查找:*/int LocateList(SeqList L,DataType x){ int i=0;while (i<___=L.length-1______________ && ____L.data[i]_=!e______________) ++i;if (i<L.length) return i+1;else return 0;}/*顺序表的插入:*/void InsertList(SeqList *L,DataType x,int i){/*将新结点x插入L所指的顺序表的第i个结点的位置上 */int j;if (i<1 || i>__L.length____________________){printf("插入位置非法");exit(0);}if ((*L).length>=___MaxSize_______________){printf("表空间溢出,退出运行");exit(0);}for (j=(*L).length-1;j>=i-1;j--)____L.data[k+1]=L.data[k]_______________________________ ; /*顺序表元素从后向前依次后移*/____L.data[i-1]=e_______________________________; /*将x插入第i个结点位置*/ _____L.length++___________________________; /*表长自增1*/}/*顺序表的删除:*/void DeleteList(SeqList *L,int i){/*从L所指的顺序表中删除第i个结点 */int j;if (i<1 || i>___L.length____________________________){printf("删除位置非法");exit(0);}for (j=i;j<=(*L).length-1;j++)____L.data[k-1]=L.data[k]________________________________; /*顺序表自第i个结点开始,依次前移*/______L.length--__________________________; /*表长自减1*/}/*顺序表的打印:*/void PrintList(SeqList L,int n){ int i;printf(“the sequal list data is:”);for (i=0;i<n;i++)printf("%d ",L.data[i]);printf("\n\n");}调试后的代码:#include<stdio.h>#define MaxSize 100typedef int Datatype;typedef struct{Datatype data[MaxSize];int length;}seqlist;void GreatList(seqlist*L,int n);int GetList(seqlist L, Datatype x);int IntList(seqlist *L,Datatype x,int i);int DelList(seqlist L,int i,Datatype *x);void PrintList(seqlist L,int n);void main(){seqlist L;int n=10,x,i;L.length=0;printf("great function:\n");GreatList(&L,n);PrintList(L,n);printf("get function:\n");printf("please input your want to search\n");scanf("%d",&x);i=GetList(L,x);if(i==0){printf("\nsorry,don't find %d\n",x);}else{printf("\nhave find the %d,it located in %d\n",x,i);}printf("\nIns function:\n");printf("\nplease input the position: \n");scanf("%d",&i);printf("\nplease input the data:\n");scanf("%d",&x);IntList(&L,i,x);PrintList(L,n);printf("\ndel function:\n");printf("\nplease input you want to delete position:\n"); scanf("%d",&i);printf("\nplease input you want delete number: ");scanf("%d",&x);DelList(L,i,&x);PrintList(L,n);//getch();}void GreatList(seqlist *L,int n){int i;for(i=0;i<n;i++){printf("\nplease input the %d data \n",i+1); scanf("%d",&(*L).data[i]);}(*L).length=n;}int GetList(seqlist L,Datatype x){int i;i=0;while((i<=L.length-1)&&(L.data[i]!=x))i++;if(i<L.length)return(i+1);elsereturn(-1);}int IntList(seqlist *L,Datatype x,int i){int k;if((i<1)||(i>L->length)){printf("\nThe position is wrong\n");return(0);}if(L->length>=MaxSize){printf("\nempty\n");return(0);}for(k=L->length-1;k>=i-1;i++){L->data[k+1]=L->data[k];L->data[i-1]=x;L->length++;}return(1);}int DelList(seqlist L,int i,Datatype *x){int k;if((i<1)||(i>L.length)){printf("\nThe position is wrong\n"); return(0);}*x=L.data[i-1];for(k=i;i<=L.length;k++){L.data[k-1]=L.data[k];L.length--;}return(1);}void PrintList(seqlist L,int n){int i;printf("\nThe sequal List Data is: \n"); for(i=0;i<n;i++)printf("%d ",L.data[i]);printf("\n");}四、运行输出结果:五、调试和运行程序过程中产生的问题及采取的措施:开始只是一些小的问题,如丢了分号、括号,单词写错了,前后不一致等等。

相关主题