淮海工学院计算机科学系
实验报告书
课程名: 《数据结构》
题 目: 线性数据结构试验
班 级: 软嵌151 学 号: 2015123352 姓 名: 吉
评语: 成绩: 指导教师: 批阅时间: 年 月 日
线性表实验报告要求
1目的与要求:
1)掌握线性表数据结构的基本概念和抽象数据类型描述; 2)熟练掌握线性表数据结构的顺序和链式存储存表示; 3)熟练掌握线性表顺序存储结构的基本操作算法实现; 4)熟练掌握线性表的链式存储结构的基本操作算法实现; 5)掌握线性表在实际问题中的应用和基本编程技巧;
6)按照实验题目要求独立正确地完成实验容(提交程序清单及相关实验数据与运行结果); 7)按照报告格式和容要求,认真书写实验报告,并于下周周二前统一提交实验报告电子版文档(每次实验全体同学必须提交实验报告电子版,实验报告文档文件命名方式:+学号+数据结构第X次实验报告)提交给学委,而后由学委以班为单位统一打包(包文件名为:软件14X班-数据结构第X次实验报告)用发给老师;提交纸质报告(每班每次收5份,学委安排,保证每学期每个同学至少提交一次)一起提交给老师。每次提交电子文档时,学委务必统计和上报未交报告人数和具体;凡逾期不交报告者,不再推迟提交,一律按照旷交处理。
8)积极开展实验组组交流和辅导,严禁直接复制和剽窃他人实验成果,一旦发现严肃处理; 9)上实验课前,要求每个同学基本写好程序,并存储在自己的U盘上,用于实验课堂操作时调试和运行。
2实验容或题目(在一个主程序中实现全部题目容) 一、顺序表的基本操作实现实验
要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法:
1)创建任意整数线性表(即线性表的元素值随机在键盘上输入)的顺序存储结构(即顺序表),长度限定在25之;
2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值); 3)在顺序表中查找第i个元素,并返回其值; 4)在顺序表第i个元素之前插入一已知元素; 5)在顺序表中删除第i个元素;
6)求顺序表中所有元素值(整数)之和;
二、链表(带头结点)基本操作实验
要求:数据元素类型ElemType取字符型char。按照动态单链表结构实现如下算法:
1)按照头插法或尾插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),长度限
定在10之;
2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);
3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;
4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE; 5)在链表中第i个结点之前插入一个新结点; 6)在线性表中删除第i个结点; 7)计算链表的长度。
3实验步骤与源程序
#include\#include\#include\#define OK 1 #define ERROR 0 #define TURE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 25
typedef struct {
ElemType elem[MAXSIZE]; int last;
}SeqList;
int GetData(SeqList *L,int i) { }
int InsList(SeqList *L,int i,ElemType e) {
return L->elem[i-1];
int k;
if((i<1)||(i>L->last+2)) {
}
}
printf(\插入位置i值不合法!\return(ERROR);
if(L->last>=MAXSIZE-1) { }
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
printf(\超出了链表的最大围,无法插入无法插入!\return(ERROR);
L->elem[i-1]=e; L->last++; return(OK);
int DelList(SeqList *L,int i,ElemType *e) { }
int SumList(SeqList *L)
int k;
if((i<1)||(i>L->last+1)) { }
*e=L->elem[i-1]; for(k=i;k<=L->last;k++)
L->elem[k-1]=L->elem[k];
printf(\删除位置不在表中,不合法!\return(ERROR);
L->last--; return(OK);
{ }
void main() {
int sum=0;
for(int i=0;i<=L->last;i++) { }
return(sum);
sum+=L->elem[i];
SeqList *l;
int p; //要查找的位置 int *q;
int r; //线性表的长度 int t; //插入的元素 int s; //删除的位置 int w; //要插入的位置 int i;
l=(SeqList *)malloc(sizeof(SeqList)); q=(int*)malloc(sizeof(int)); printf(\请输入线性表的长度:\scanf(\l->last=r-1;
printf(\请输入线性表中的各元素值:\\n\for(i=0;i<=l->last;i++) { }
printf(\线性表中所有元素之和是:%d\\n\printf(\请输入要查找的位置:
\
scanf(\
scanf(\
printf(\查找的元素是:%d\\n\ }
// 数据结构第二题.cpp : Defines the entry point for the console application. //
#include
printf(\请输入要插入的位置:\scanf(\
printf(\插入的元素是: \scanf(\InsList(l,p,t);
printf(\插入后的线性表:\\n\for(i=0;i<=l->last;i++) { }
printf(\
printf(\请输入要删除的位置:\scanf(\DelList(l,s,q);
printf(\删除的元素值是:%d\\n\printf(\删除后的线性表:\\n\for(i=0;i<=l->last;i++) { }
printf(\printf(\
#define TURE 1 #define FALSE 0 typedef char ElemType;
typedef struct Node {
ElemType data; struct Node*next;
}Node,*LinkList;
void CreateTail(LinkList L);
int DelList(LinkList L,int i,ElemType e); void Get(LinkList L,int i); void InitList(LinkList *l);
int InsList(LinkList L,int i,ElemType e); int ListLength(LinkList L); void Locate(LinkList L,ElemType e);
void main() {
LinkList k;
int m; //要查找的序号 int n; //要插入的位置 int t; // 要删除的位置 char a; //要查找的元素 InitList(&k); Node *p; p=k->next;
printf(\用尾插法建立单链表,请输入链表数据,以$结束!\\n\
CreateTail(k);
printf(\请输入要查找的元素: \scanf(\
printf(\请输入要查找的序号: \scanf(\
printf(\查找到的元素是: \Get(k,m); while(p!=NULL) { }
printf(\p=p->next;
Locate(k,a);
printf(\请输入要插入的位置: \scanf(\
printf(\插入的元素是: \scanf(\InsList(k,n,a);
printf(\插入后的链表是: \p=k->next; while(p!=NULL) { }
printf(\p=p->next;
}
void InitList(LinkList *k) { }
void CreateTail(LinkList L) {
printf(\请输入要删除的位置: \scanf(\DelList(k,t,a);
printf(\删除的元素是:%c\\n\scanf(\
printf(\删除后的链表是: \p=k->next; while(p!=NULL) { }
printf(\p=p->next;
printf(\链表的长度是:%d\\n\
*k=(LinkList)malloc(sizeof(Node)); (*k)->next=NULL;
char c; Node *r,*s; int flag=1; r=L;
}
while(flag) { }
c=getchar(); if(c!='$') { } else { }
flag=0;
r->next=NULL;
s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s;
void Get(LinkList L,int i) {
int j; Node *p;
p=L;j=0; while(p->next!=NULL&&j
printf(\p=p->next; j++;
else
}
printf(\
void Locate(LinkList L,ElemType e) { }
int InsList(LinkList L,int i,ElemType e) {
Node *p;
p=L->next; while(p!=NULL) if(p->data!=e)
p=p->next;
else break; if(p->data==e)
printf(\
else
printf(\
Node *pre,*s; int k;
pre=L;k=0; while(pre!=NULL&&k if(k!=i-1) { printf(\插入位置不合法!\return ERROR; pre=pre->next; k=k+1; } } s=(Node*)malloc(sizeof(Node)); s->data=e; s->next=pre->next; pre->next=s; return OK; int DelList(LinkList L,int i,ElemType e) { } int ListLength(LinkList L) Node *p,*r; int k; p=L;k=0; while(p!=NULL&&k if(k!=i-1) { } r=p->next; p->next=p->next->next; e=r->data; free(r); return OK; printf(\删除结点的位置不合法!\return ERROR; p=p->next; k=k+1; { } Node *p; p=L->next; int j=0; while(p!=NULL) { } return j; p=p->next; j++; 4测试数据与实验结果(可以抓图粘贴) 5结果分析与实验体会 此次试验所使用的基本概念为上学期的链表的容,而链表主要是通过结点等跳来跳去,充分利用空间,而且链表,指针通常搭配使用,这增加了理解上的难度,只要有一错错误,整个程序便会出现错误,所以此次试验尽管题目不难,但写起代码非常麻烦,尤其是c语言学得不好的,更会吃力。