数据结构-单链表实验报告

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

单链表实验报告

一、实验目的

1、帮助读者复习C++语言程序设计中的知识。

2、熟悉线性表的逻辑结构。

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容

[问题描述]

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。

[基本要求]

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。

三、算法设计

(1)建立带表头结点的单链表;首先输入结束标志,然后建立循环逐个输入数据,直到输入结束标志。

(2)输出单链表中所有结点的数据域值;首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。

(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;建立两个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,建立循环扫描链表。当当前结点指针域不为空且数据域等于x的时候,申请结点并给此结点数据域赋值为y,然后插入当前结点后面,退出函数;当当前结点指针域为空的时候,申请结点并给此结点数据域赋值为y,插入当前结点后面,退出函数。

(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。建立三个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,最后一个备用;建立整形变量l=0;建立循环扫描链表。当当前结点指针域为空的时候,如果当前结点数据域等于k,删除此结点,l++,跳出循环,结束操作;如果当前结点数据域不等于k,跳出循环,结束操作。当当前结点指针域不为空的时候,如果当前结点数据域等于k,删除此结点,l++,继续循环操作;如果当前结点数据域不等于k,指针向后继续扫描。循环结束后函数返回变量l的值,l便是删除的结点的个数。

四、实验结果

1、新建一个链表:

2、输出链表的数据:

(4)插入数据:在数据为3后面插入一个数据100:

(5)删除数据:删除刚刚插入的数据100:

五、总结

实验之前由于准备不够充分,所以堂上实验时只完成了建立单链表和数据的输出,而后面两个实验要求也是用来很多时间长完成的。以后做实验前,一定要做好充分的准备,有一个清晰的思路,遇到更复杂的实验也一定能轻松完成。

六、源代码

#include "stdio.h"

#include "conio.h"

#define DataType int

typedef struct node

{

DataType data;

struct node *link;

}LNode;

LNode *h;

LNode *createtail()

{

LNode *s,*r;

int x,tag;

system("cls");

printf("input the sign of ending:");

scanf("%d",&tag);

h=(LNode * )malloc(sizeof(LNode));

h->data=tag;

r=h;

printf("input the data:");

scanf("%d",&x);

while(x!=tag)

{

s=(LNode * )malloc(sizeof(LNode));

s->data=x;

r->link=s;

r=s;

scanf("%d",&x);

}

r->link=NULL;

return h;

}

void output(LNode *h)

{

LNode *r;

int i;

system("cls");

r=h;

for(i=0;r->link!=NULL;i++)

{

printf("data[%d]=%d\n",i,r->link->data);

r=r->link;

}

getch();

}

void insert(LNode *h)

{

LNode *r,*s;

int x,y;

system("cls");

printf("Input the data that you want to insert:\n"); printf("x=");

scanf("%d",&x);

printf("y=");

scanf("%d",&y);

r=h;

r=r->link;

for(;;r=r->link)

{

if(r->data==x)

{

s=(LNode *)malloc(sizeof(LNode));

s->data=y;

s->link=r->link;

r->link=s;

break;

}

if(r->link==NULL)

{

s=(LNode *)malloc(sizeof(LNode));

s->data=y;

s->link=NULL;

r->link=s;

break;

}

}

}

int del(LNode *h)

{

LNode *r,*s,*t;

int k,l=0;

system("cls");

printf("Input the data that you want to delete:"); scanf("%d",&k);

r=h;

s=r;

r=r->link;

for(;;)

{

if(r->link==NULL)

{

if(r->data==k)

{

l++;

s->link=NULL;

free(r);

break;

}

else break;

}

else

{

if(r->data==k)

{

l++;

t=r;

s->link=t->link;

r=t->link;

free(t);

}

else {r=r->link;s=s->link;}

}

}

return l;

相关文档
最新文档