单链表实践

姓名 学号
班级 成绩
实验名称 带头结点的单链表的逆置
实验目的 (1)掌握单链表的基本操作(建立、插入、删除、逆序、输出);
(2)加深对C/C++语言的使用。
实验内容 (1)建立含有n个数据元素的带头结点的单链表;
(2)依次输出该表中各元素的值;
(3)将单链表进行逆置运算;
(4)依次输出逆置后表中各元素的值。
概要设计 1、链表的抽象数据类型定义为:
ADT LINKLIST{
数据对象:D={ai| ai∈(0,1,…,9),i=0,1,2,…,n,n≥0}
数据关系:R={< ai-1, ai >| ai-1, ai∈D,i=1,2,…,n}
基本操作:
CreateList(&L)
操作结果:创建一个链表L。
PrintList(L)
初始条件:链表L已存在。
操作结果:在屏幕上输出链表的值。
InverseList(L)
初始条件:链表L已存在。
操作结果:将链表逆置。
} ADT LINKLIST
2、本程序包含五个模块:
(1)主程序模块:
main(){
定义变量;
接受命令;
处理命令;
}
(2)创建链表模块——产生一个链表;
(3)输出链表模块——把链表输出;
(4)链表逆置模块——将链表逆置;

各模块之间的调用关系如下:
主程序模块—〉创建链表模块—〉输出链表模块
—〉链表逆置模块—〉输出链表模块
详细设计 viod CreateList_L(Linklist &L,int n)
{
//逆位序输入n个元素的值(问题一:这句话是什么意思,哪里体现了逆位序输入?) 
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;//建立一个带表头的单链表
for(i=n;i>0;--i)
{
p=(Linklist)malloc(sizeof(LNode));//生成新节点
scanf(&p->data);
p->next=L->next;(问题二:这句是什么意思。有什么用?)
L->next=p;//插入到表头(问题三:这句什么意思,有什么用?)
}
}
viod CreateList_L(Linklist &L,int n)
{
//逆位序输入n个元素的值 这是写程序的人的注释 逆序体现在插入数据时,不是在尾部追加,而是从头部加入 每次输入的数据结点,都会成为当前的数据头 正向遍历数据(表头到表尾)时,所显示的数据与录入的顺序是相反的。
L=(Linklist)malloc(sizeof(Lnode)); 
L->next=NULL;//建立一个带表头的单链表 L是表头 L->next是数据头
for(i=n;i>0;--i)
{
p=(Linklist)malloc(sizeof(LNode));//生成新节点
scanf(&p->data);
p->next=L->next; //将原数据头结点(L->next) 加到 新增加的结点p之后
L->next=p;//插入到表头 将表头L的后继结点指向新结点p 新结点p成为新的数据头
}
调试分析
运行结果

 

转自:https://zhidao.baidu.com/question/331992415.html

posted @ 2017-02-15 15:50  N神3  阅读(150)  评论(0)    收藏  举报