c语言单链表设计报告,单链表实验报告

《数据结构》实验报告二

分校:

学号:

日期:

班级:

姓名:

程序名: L2311.CPP

一、上机实验的问题和要求:

单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:

1. 从键盘输入20个整数,产生带表头的单链表,并输入结点值。

2. 从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。

3. 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。 4. 从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。 5. 将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。

6. 删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。

7. 把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。 8. (★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:

(包括程序的结构,数据结构,输入/输出设计,符号名说明等)

三、源程序及注释:

四、运行输出结果:

五、调试和运行程序过程中产生的问题及采取的措施:

六、对算法的程序的讨论、分析,改进设想,其它经验教训:

七、对实验方式、组织、设备、题目的意见和建议:

《数据结构》实验报告二

分校:

学号:

日期:

班级:

姓名:

程序名: L2311.CPP

一、上机实验的问题和要求:

单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:

1. 从键盘输入20个整数,产生带表头的单链表,并输入结点值。

2. 从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。

3. 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。 4. 从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。 5. 将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。

6. 删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。

7. 把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。 8. (★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:

(包括程序的结构,数据结构,输入/输出设计,符号名说明等)

三、源程序及注释:

四、运行输出结果:

五、调试和运行程序过程中产生的问题及采取的措施:

六、对算法的程序的讨论、分析,改进设想,其它经验教训:

七、对实验方式、组织、设备、题目的意见和建议:

实验四 单链表的建立

一、实验目的

1.掌握线性表的链式存储结构——单链表的定义及C语言实现。 2.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容

1. 建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据分别按尾插入法和头插法来建立相应单链表。 【知识要点】

为了便于实现各种运算,通常在单链表的第一个结点前增设一个附加结点,称为头结点,它的结构与表结点相同,其数据域可不存储信息,也可存储表长等附加信息,具体如下图。

【实验提示】

单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下:

typedef int datatype;

/* 线性表中存放整型元素 */ typedef struct LNode

/ * 结点类型定义 * /

{

datatype data;

/ * 数据域 * /

struct node *next;

/ * 指针域 * / }Linklist;

/* Linklist为单链表类型*/

注意结点的建立方法及构造新结点时指针的变化。构造一个结点需用到C语言的标准函数malloc(),如给指针变量p分配一个结点的地址:

p=( strcut LNode *)malloc(sizeof(Linklist));该语句的功能是申请分配一个类型为Linklist的结点的地址空间,并将首地址存入指针变量p中(或p=new(struct LNode) ;即生成新结点)。当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。 【程序提示】

#includetypedef struct LNode{

//补充实现表节点类型的定义; } Linklist;

Linklist * creatlist() { int x; Linklist *head, *p; // head为单链表的头指针,p指向新建的结点

//补充实现单链表的建立;

return(head);

// 函数返回链表头指针head }

void output(Linklist *HeadL) { if(HeadL->next==NULL) printf("空链表!\n"); else { printf("链表为:\n"); Linklist *P; P=HeadL->next; while(P!=NULL) {

printf("%d->",P->data); P=P->next; } printf("\n"); }

}

void main(void) { Linklist *List; List=creatlist( ); output(List); } 【参考程序】

1、尾插法

#includetypedef struct LNode{ int data; struct LNode *next; } Linklist;

Linklist * creatlist() { int x;

Linklist *head, *p,*r; /* head为头指针 */

head=new(struct LNode);

head->data=0;

/* 表头结点数据域赋值 */

r=head;

/* 尾指针的初值为头结点head */

printf("请随机输入互不相同的正整数以0作为结束符:\n");

scanf("%d", &x);

/* 读入第一个结点的值 */

while (x!=0)

/* 输入数据,以0为结束符 */ { p=new(struct LNode); /* 生成新结点 */

p->data=x;

/* 给新结点的数据域赋值 */

r->next=p;

/* 新结点插入到表尾*rear之后 */

r=p;

/* 将尾指针rear指向新的尾结点 */

head->data++;

/* 链表长度计数 */

scanf("%d", &x);

/* 输入下一个结点的数据 */

}

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值