《数据结构》实验报告一
学校: 学号: 日期:
班级: 姓名: 程序名:
一、上机实验的问题和要求:
顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求:
1. 从键盘输入10个整数,产生顺序表,并输入结点值。
2. 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找
不到,则显示“找不到”。
3. 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插
入在对应位置上,输出顺序表所有结点值,观察输出结果。 4. 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
三、源程序及注释:#include
/*顺序表的定义:*/ #define ListSize 100 typedef int DataType; typedef struct {
/*子函数的声明*/
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个结点*/
1
/*表空间大小可根据实际需要而定,这里假设为100*/
/*DataType可以是任何相应的数据类型如int, float或char*/
DataType data[ListSize]; /*向量data用于存放表结点*/ int length;
/*当前的表长度*/
}SeqList;
void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/
void main() {
/*调用查找函数*/
printf(“search function:\\n”);
printf(\ scanf(\
i=LocateList(L,x); /*顺序表查找*/ if (i==0)
printf(\ else
printf(\,it locate in %d!\\n\\n\
/*调用插入函数*/
printf(“Insert function:\\n”);
printf(\输入要插入的位置:(input the position:)\
scanf(\
printf(\输入要插入的元素:(input the data:)\scanf(\InsertList(&L,x,i); PrintList(L,n);
/*调用删除函数*/
printf(“delete function:\\n”);
printf(\输入要删除的位置:(input the position:)\ }
/*顺序表的建立:*/
void CreateList(SeqList *L,int n)
scanf(\DeleteList(&L,i); PrintList(L,n);
/*顺序表删除 */ /*打印顺序表 */
/*顺序表插入 */ /*打印顺序表 */
/*调用创建线性表函数*/ printf(“create function:\\n”); CreateList(&L,n); PrintList(L,n);
/*建立顺序表*/ /*打印顺序表*/
SeqList L; int n=10,x,i; L.length=0;
/*欲建立的顺序表长度*/
2
{ }
int i;
for (i=0;i scanf(\ {printf(\ } (*L).length=n; /*顺序表的查找:*/ int LocateList(SeqList L,DataType x) { int i=0; while (i<___=L.length-1______________ && ____L.data[i]_=!e______________) ++i; if (i /*顺序表的插入:*/ void InsertList(SeqList *L,DataType x,int i) {/*将新结点x插入L所指的顺序表的第i个结点的位置上 */ } /*顺序表的删除:*/ void DeleteList(SeqList *L,int i) {/*从L所指的顺序表中删除第i个结点 */ int j; if (i<1 || i>___L.length____________________________) { int j; if (i<1 || i>__L.length____________________) { } if ((*L).length>=___MaxSize_______________) { } for (j=(*L).length-1;j>=i-1;j--) ____L.data[k+1]=L.data[k]_______________________________ ; /*顺序表元素从后printf(\表空间溢出,退出运行\exit(0); printf(\插入位置非法\exit(0); 向前依次后移*/ ____L.data[i-1]=e_______________________________; /*将x插入第i个结点位置*/ _____L.length++___________________________; /*表长自增1*/ 3 } } 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; for (i=0;i printf(\printf(\ printf(“the sequal list data is:”); 调试后的代码: #include 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; 4 printf(\ GreatList(&L,n); PrintList(L,n); printf(\ printf(\ scanf(\ i=GetList(L,x); if(i==0) { printf(\ } else { printf(\ } printf(\ printf(\ scanf(\ printf(\ scanf(\ IntList(&L,i,x); PrintList(L,n); printf(\ printf(\ scanf(\ printf(\ scanf(\ DelList(L,i,&x); PrintList(L,n); //getch(); } void GreatList(seqlist *L,int n) { int i; for(i=0;i 5 { printf(\ scanf(\ } (*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 return(-1); } int IntList(seqlist *L,Datatype x,int i) { int k; if((i<1)||(i>L->length)) { printf(\ return(0); } if(L->length>=MaxSize) { printf(\ 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++; } 6 return(1); } int DelList(seqlist L,int i,Datatype *x) { int k; if((i<1)||(i>L.length)) { printf(\ 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(\ for(i=0;i printf(\ printf(\} 四、运行输出结果: 7 五、调试和运行程序过程中产生的问题及采取的措施: 开始只是一些小的问题,如丢了分号、括号,单词写错了,前后不一致等等。 最主要的问题就是函数检查没错误,但是运行中出现错误。第一个就是插入的函数能打印出来,但是出入不进去数;第二就是删除不了数。 8 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 本次实验主要考查的的是顺序表的应用及编写,而其他的很多功能都是原来练习过的,相对来说比较容易。但是完成本次实验收获还是很多的,不仅仅实在新知识上的加深,进一步了解顺序表。从这次的试验中认识到了自己还有没有学习到的地方,今后还要认真吸取验教训。 9 七、对实验方式、组织、设备、题目的意见和建议: 希望老师以后可以给我们多些自己动手实践的机会,可以在课堂上多让我们动手去上机操作,老师带领我们完成主要部分,或给一些提示指导。以后课下及时复习,认真看好课本,希望老师课下及时给予指导帮助。 10