当前位置:文档之家› 《数据结构》实验1实验报告

《数据结构》实验1实验报告

南京工程学院实验报告操作的函数程序清单,分别用顺序表和链表结构完成,并在首页上表明团队名称、成员及个人的工作(函数),未来的成绩评定时将包含这一部分的团队成绩及个人的工作成绩。

一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。

2.掌握线性表的顺序存储结构的定义及实现。

3.掌握线性表的链式存储结构——单链表的定义及实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容1.顺序线性表的建立、插入及删除。

2.链式线性表的建立、插入及删除。

三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。

3.建立一个带头结点的单链表,结点的值域为整型数据。

要求将用户输入的数据按尾插入法来建立相应单链表。

四、程序主要语句及作用(main函数程序清单)程序1的主要代码(附简要注释)#include "stdio.h"#include "malloc.h"#define SUCCESS 1#define FAILURE 0#define null 0#define maxsize 100typedef int datatype;typedef struct /*定义线性表(顺序结构)数据类型*/{ datatype data[maxsize];int last;}sequenlist;int n;/*定义功能选择菜单函数*/void print(){ printf("----线性表(顺序结构)的基本操作----\n");printf("----------开始----------\n");}/*打印线性表(顺序结构)*/void printout(sequenlist *L){ int i;for(i=1; i<=L->last; i++)printf(" [%d]", i);printf("\n");for(i=1; i<=L->last; i++)printf("%6d", L->data[i]);printf("\n");}/*02创建线性表(顺序结构)*/void creatlist(sequenlist *L){ int i;int tmp;printf("请输入线性表中数据的个数:");scanf("%d",&n);for(i=1; i<=n; i++){ printf("data[%d]=", i);fflush(stdin); /*清除掉键盘缓冲区*/scanf ("%d", &tmp);L->data[i] = tmp;}L->last=n;}/*05求线性表(顺序结构)的长度*/int CountList(sequenlist *L){return L->last;}//主驱动函数main(){ sequenlist *L;int cmd;int x,i;print();L=(sequenlist *)malloc(sizeof(sequenlist)); /*指针在使用前一定要初始化*/ do{ printf("\n--------------------------\n");printf("2......创建线性表(顺序结构)\n");printf("5......线性表(顺序结构)长度\n");printf("11.....退出\n");printf("----------请选择----------\n");do{ fflush(stdin); /*清除掉键盘缓冲区*/scanf("%d",&cmd);}while((cmd!=1)&&(cmd!=2)&&(cmd!=3)&&(cmd!=4)&&(cmd!=5)&&(cmd!=6) &&(cmd!=7)&&(cmd!=8)&&(cmd!=9)&&(cmd!=10)&&(cmd!=11));switch (cmd){case 2:printf("请根据提示创建线性表(顺序结构)!\n");creatlist(L);printf("结果如下\n");printout(L);break;case 5:printf("线性表(顺序结构)长度为:");printf("%d\n",CountList(L));break;}}while (cmd!=11);}程序2的主要代码(附简要注释)/*03在第i个结点前插入元素x(note:元素从1始计数)*/int insert(sequenlist *L, datatype x,int i){ int j;if (L->last==maxsize)/*如果原线性表(顺序结构)已经满了*/{ printf("线性表(顺序结构)已满\n");return 0;}else if ((i<1)||(i>L->last+1)) /*如果输入的i值超出范围*/{ printf("错了,请输入正确的'i'值\n");return 0;}else{ for(j=L->last; j>=i; j--) /*从第i个元素起,每个元素后移一位*/L->data[j+1]=L->data[j];L->data[i]=x;L->last=L->last+1;}程序3的主要代码(附简要注释)#include<stdio.h>#include<stdlib.h>typedef struct Node{int data;struct Node *next;}Node,*Linklist;Linklist Init_L( );void Create_L(Linklist L);void ListTraverse_L (Linklist L);int main( ) {Linklist L = NULL;L = Init_L( );Create_L(L);ListTraverse_L (L);}Linklist Init_L( ){Linklist s;s = (Linklist) malloc (sizeof (Node) );if (s){s->next = NULL; return s; }else { printf("空间不足"); return NULL; }}void Create_L(Linklist L){int i,n,a;char tmp ;Linklist p;printf ("请输入表的元素个数\n");scanf ("%d", &n);for (i = 0; i < n; i++){printf("请输入第%d个元素\n",i);scanf("%d",&tmp);p = (Node *)malloc (sizeof (Node) ); p->data = tmp;p->next = (L)->next;(L)->next = p;}}void ListTraverse_L (Linklist L){ Linklist p;p = L->next;printf("顺序表的结点分别是:\n");while(p) {printf("%d\t",p->data);p = p->next;}printf("\n");}五、程序运行结果截图程序1程序2程序3六、收获,体会及问题(写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)通过这次写实验报告,我深切的理解了这门课的本质。

刚开始学这门课时,当时还不清楚这门课程的目的,现在,我真正的理解了:数据结构像是身体的骨骼,而C++是填充这骨骼的肉体,二者相结合才能使整个程序更加完整,健全。

数据结构是个框架,模型,抽象数据类型中列举了各种操作,而所用的C++语言,将各种操作描述出来构成算法。

数据结构+算法=程序设计。

在这次设计的过程中,我还遇到了,很多的问题。

顺序表是按顺序存储的,用了一维数组来存储,又结合C++的程序设计,我又用了类,但是,在执行时出现了问题。

后来问同学,指出我的错误,不过获益不少。

我又重新整理思路,把顺序表的基本操作写好了。

虽然走了很多弯路,但是让我认识到,一定要创新,大胆,不能按照旧的思路去干新的事情。

单链表写起来简单多了,这个很快就搞定了。

但是细节上出了问题。

比如说,有些变量的重复定义,有些变量又没有定义,在调用函数,就直接复制过来,没有改参数……通过修改,我深刻理解到:细节决定成败,在以后,不管做任何事情都要认真,细心。

这次的实验报告,让我受益匪浅,不仅有知识方面的,还有生活和精神上的。

总之,我会继续我的兴趣编程,相信在编程的过程中,能不断的提高自己。

相关主题