实验2-不带头结点的单链表

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

上海电力学院

数据结构实验报告

(2014/2015 学年第2学期)课程编号250504704

课程名称数据结构

院(系)

专业

班级

学号

姓名

实验名称实验2 不带头结点的单链表

任课老师卢芳芳

实验2 不带头结点的单链表

1【实验目的与要求】

1、熟练掌握动态链表结构及有关算法的设计方法。

2、理解不带表头结点的单链表的特点,掌握其基本操作。

3、熟练掌握运用不带头结点链表表示特定形式的数据的方法,并设计出有关算法。

2【实验内容和步骤】

已知不带头结点的链表结构定义及头插法建表、尾插法建表和打印链表等函数定义如下(详见slnklist.h文件),基于该文件完成实验题1-实验4.

#include

#include

/**************************************/

/* 链表实现的头文件,文件名slnklist.h */

/**************************************/

typedef int datatype;

typedef struct link_node{

datatype info;

struct link_node *next;

}node;

typedef node *linklist;

/**********************************/

/*函数名称:creatbystack() */

/*函数功能:头插法建立单链表*/

/**********************************/

linklist creatbystack()

{ linklist head,s;

datatype x;

head=NULL;

printf("请输入若干整数序列:\n");

scanf("%d",&x);

while (x!=0) /*以0结束输入*/

{ s=(linklist)malloc(sizeof(node)); /*生成待插入结点*/

s->info=x;

s->next=head; /*将新结点插入到链表最前面*/

head=s;

scanf("%d",&x);

}

return head; /*返回建立的单链表*/

}

/**********************************/

/*函数名称:creatbyqueue() */

/*函数功能:尾插法建立单链表*/

/**********************************/

linklist creatbyqueue()

{

linklist head,r,s;

datatype x;

head=r=NULL;

printf("请输入若干整数序列:\n");

scanf("%d",&x);

while (x!=0) /*以0结束输入*/

{ s=(linklist)malloc(sizeof(node));

s->info=x;

if (head==NULL) /*将新结点插入到链表最后面*/ head=s;

else

r->next=s;

r=s;

scanf("%d",&x);

}

if (r) r->next=NULL;

return head; /*返回建立的单链表*/

}

/**********************************/

/*函数名称:print() */

/*函数功能:输出不带头结点的单链表*/

/**********************************/

void print(linklist head)

{ linklist p;

int i=0;

p=head;

printf("List is:\n");

while(p)

{

printf("%5d",p->info);

p=p->next;

i++;

if (i%10==0) printf("\n");

}

printf("\n");

}

/**********************************/

/*函数名称:delList() */

/*函数功能:释放不带头结点的单链表*/

/**********************************/

void delList(linklist head)

{ linklist p=head;

while (p)

{ head=p->next;

free(p);

p=head;

}

}

1.编写函数lnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。并构造测试用例进行测试。

●程序源代码(注意添加注释)

●运行结果(直接截取结果图)

2.线性表(a1, a2, a3, …, a n)采用不带头结点的单链表存储,请设计算法函数linklist reverse1(linklist head)和void reverse2(linklist *head)将不带头结点的单链表head倒置,使表变成(a n, a n-1, a n-2, …, a2, a1). 。并构造测试用例进行测试。

●程序源代码(注意添加注释)

●运行结果(直接截取结果图)

相关文档
最新文档