(完整版)数据结构实验报告全集

  • 格式:docx
  • 大小:57.68 KB
  • 文档页数:31

下载文档原格式

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

数据结构实验报告全集

实验一线性表基本操作和简单程序

1 .实验目的

(1 )掌握使用Visual C++ 6.0 上机调试程序的基本方法;

(2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。

2 .实验要求

(1 )认真阅读和掌握和本实验相关的教材内容。

(2 )认真阅读和掌握本章相关内容的程序。

(3 )上机运行程序。

(4 )保存和打印出程序的运行结果,并结合程序进行分析。

(5 )按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果

实验代码:

1)头文件模块

#include iostream.h>// 头文件

#include// 库头文件------ 动态分配内存空间

typedef int elemtype;// 定义数据域的类型

typedef struct linknode// 定义结点类型

{

elemtype data;// 定义数据域

struct linknode *next;// 定义结点指针

}nodetype;

2)创建单链表

nodetype *create()// 建立单链表,由用户输入各结点data 域之值,

// 以0 表示输入结束

{

elemtype d;// 定义数据元素d

nodetype *h=NULL,*s,*t;// 定义结点指针

int i=1;

cout<<" 建立一个单链表"<

while(1)

{

cout <<" 输入第"<< i <<" 结点data 域值:

cin >> d;

if(d==0) break;// 以0 表示输入结束

if(i==1)// 建立第一个结点

{

h=(nodetype*)malloc(sizeof(nodetype));//

表示指针h h->data=d;h->next=NULL;t=h;//h 是头指针

}

else// 建立其余结点

{

s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s;

t=s;//t 始终指向生成的单链表的最后一个节点

i++;

}

return h;

}

3) 输出单链表中的元素

void disp(nodetype*h)// 输出由h 指向的单链表的所有data 域之值{ nodetype *p=h;

cout<<" 输出一个单链表:"<

if(p==NULL)cout<<" 空表";

while(p!=NULL)

{

cout<data<<" ";p=p->next;

}

cout<

}

4) 计算单链表的长度

int len(nodetype *h)// 返回单链表的长度

{

int i=0;

nodetype *p=h;

while(p!=NULL)

{

p=p->next;i++;

}

return i;

}

5) 寻找第i 个节点

nodetype *find(nodetype *h,int i)// 返回第i 个节点的指针

{

nodetype *p=h;

int j=1;

if(i>len(h)||i<=0)

return NULL;//i 上溢或下溢c

else

{

while (p!=NULL&&j<1)// 查找第i 个节点,并由p 指向该节点{

j++;p=p->next;

}

return p;

}

6)单链表的插入操作

nodetype *ins(nodetype *h,int i,elemtype x)// 在单链表head 中第i 个节点// ( i>=0 )之后插入一个data 域为x 的节点

{

nodetype *p,*s;

s=(nodetype*)malloc(sizeof(nodetype));// 创建节点s

s->data=x;s->next=NULL;

if(i==0)//i=0:s 作为该单链表的第一个节点

{

s->next=h;h=s;

}

else

{p=find(h,i);// 查找第i 个节点,并由p 指向该节点

if(p!=NULL)

{

s->next=p->next;

p->next=s;

}

return h;

}

}

7)单链表的删除操作

nodetype *del(nodetype *h,int i)// 删除第i 个节点

{

nodetype *p=h, *s;

int j=1;

if(i==1)// 删除第1 个节点

{

h=h->next;free(p);

}

else

{

p=find(h,i-1);// 查找第i-1 个节点,并由

p 指向该节点if(p!=NULL&&p->next!=NULL)

{

s=p->next;//s 指向要删除的节点

p->next=s->next;

free(s);

}

else cout<<" 输入i 的值不正确"<

}

return h;

}

8) 释放节点空间