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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》-实验报
告1
-CAL-FENGHAI.-(YICAI)-Company One1
xxx 实验报告
一、实验目的
1.熟悉上机环境,进一步掌握语言的结构特点。

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

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

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

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

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

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

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

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

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

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

四、程序主要语句及作用
1)程序1的主要代码(附简要注释)
#include<iostream>
using namespace std;
#define MAXSIZE 1024
//#define OVERFLOW 0
//#define NULL 0
#define OK 1
#define MAXSIZE 1024
typedef int elemtype; /* 线性表中存放整型元素 */
typedef struct //结构定义头文件sqlist.h
{ elemtype vec[MAXSIZE];
int len; /* 顺序表的长度 */
}sqlist;
int initlist(sqlist *L,int k)
{ int i;
printf("Input the list:");
for( i=0;i<k;i++)
scanf("%d", &L->vec[i]);//cin>>L->vec[i];同效,注意输入时地址"&"
return OK;
}
// 以下是整个源程序:#include"sqlist.h"
int main()
{ int i,n;
sqlist *L,a; //定义表的变量
printf("\n Input the length of the list L:\n");
scanf("%d",&n);
L=&a; //指针引用,如果去掉L=&a语句,会出现什么结果?
L->len=n; //将长度传给len
initlist(L,n);
printf("Output the list and its length:\n");
for(i=0;i<n;i++)
printf("%d ", L->vec[i]);
printf("\nThis sqlist's length is %d", L->len);
system("pause");
return 0;
}
2)程序2的主要代码(附简要注释)
/*顺序表的插入
利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31}
然后在第i个位置插入元素68。

注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序
本程序实现的是在第i个元素之前插入新的元素(顺序表中元素的次序)的区别。

*/ #include<iostream>
using namespace std;
//#include"initlist.h"
#define MAXSIZE 1024
//#define OVERFLOW 0
#define ERROR 0
#define OK 1
#define MAXSIZE 1024
typedef int elemtype; /* 线性表中存放整型元素 */
typedef struct //结构定义头文件initlist.h
{ elemtype vec[MAXSIZE];
int len; /* 顺序表的长度 */
}sqlist;
int initlist(sqlist *L,int k)
{ int i;
printf("Input the list:");
for( i=0;i<k;i++)
scanf("%d", &L->vec[i]);//cin>>L->vec[i];同效,注意输入时地址"&"
return OK;
}
/*----------------------------------------------*/
int insert(sqlist *L,int i,int x)
//插入运算,将值为x的元素插入到第i个元素之前
{ int j;
if((*L).len>=MAXSIZE)
{ printf("the list is overflow\n");
return ERROR;
}
else if((i<1)||(i>(*L).len+1))
{ printf("position is not corrent.\n");
return ERROR;
}
else{ for(j=(*L).len-1;j>=i-1;j--) //L->len
(*L).vec[j+1]=(*L).vec[j]; //元素后移
(*L).vec[i]=x; //插入元素区别:i-1
(*L). len++; //表长度增加1
return OK;
}
}
int main()
{ int n,i,x;
sqlist *L,a;
printf("\n Input the length of the list L:\n");
scanf("%d",&n); //输入表长度
L=&a; L->len=n;
initlist(L,n);
printf("\ninput the insert location:\n");
scanf("%d",&i);
printf("\ninput the insert data:\n");
scanf("%d",&x);
if(insert(L,i,x))
{ printf("The length of the new list is:%d\n ",L->len); printf("Output the new list's data:\n");
for(i=0;i<L->len;i++)
printf("%d\n", L->vec[i]);
}
else
printf("can't insert the data!\n");
system("pause");
return 0;
}
3)程序3的主要代码(附简要注释)
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
typedef struct tagNODE{
int value;
struct tagNODE *next;
}NODE, *LPNODE;
void Input(LPNODE pHead)
{
LPNODE pNext, pTmp;
char ch;
if(!pHead) { return; }
pNext = pHead;
while(pNext && pNext->next){
pNext = pNext->next;
}
while(1){
printf("enter new value: ");
pTmp = (LPNODE)malloc(sizeof(NODE));
memset(pTmp, 0, sizeof(NODE));
pNext->next = pTmp;
scanf("%d", &(pTmp->value));
fflush(stdin);
printf("continue(y/n)");
ch = getchar();
if(ch != 'y' && ch !='Y'){
break;
}
pNext = pNext->next;
}
}
void Output(LPNODE pHead)
{
LPNODE pNext;
int i = 1;
if(!pHead) { return; }
pNext = pHead->next;
while(pNext){
printf("%d node value: %d\n", i++, pNext->value);
pNext = pNext->next;
}
}
void FreeNode(LPNODE pHead)
{
LPNODE pTmp1, pTmp2;
if(!pHead) { return; }
if(pTmp2 = pHead->next) {
while(pTmp2) {
pTmp1 = pTmp2->next;
free(pTmp2);
pTmp2 = pTmp1;
}
}
}
int main()
{
NODE head = { 0 };
Input(&head);
Output(&head);
FreeNode(&head);
return 0;
}
五、程序运行结果截图
1)程序1
2)程序2
插入数据不在列表范围内:
3)程序3
六、收获,体会及问题
本次试验让我认识到了自己的不足之处太多:
1.大部分的时间都用在了编程上,主要是因为C语言掌握的问题,C语
言基础不好特别是对于C语言中链表的一些定义和基本操作不够熟练,导致在编程过程中还要不断的拿着c语言的教材查找,所以今后还要对C语言多练习,多动手,多思考。

2.数据结构有很强的逻辑性,因此我认为如果在上机之前先把逻辑搞清楚很重要,不管是对算法的设计还是对程序的调试都有很大帮助。

3.经过一次上机实践,我认为实践课很重要,上理论课只是纸上谈兵,只是被动地接受,而实践课上能将学过的知识利用起来,同时还有一些东西只能是自己上机实践才能慢慢探索出的。

所以我在做试验的时候特别费劲,特别吃力,这也是事出有因的。

通过自我反省,总结不足之处后,我还是脚踏实地去查找资料,包括请教老师,上网搜索数据库线性表操作的优秀代码,经过不断的验证,修改和深入的研究,最终使得自己的程序得以运行,实现了实验的最终目的和要求。

也许每次实验都是有个过程的,虽然过程比较繁琐和艰难,但是我觉得只要认真的分析实验内容,积极搜索实验所需材料,再多多请教老师和同学,那么实验就不会困难重重。

自己要学习的地方太多,以后更要努力学习数据结构。

相关文档
最新文档