单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
中文名称 | 单链表 | 外文名称 | Singly Linked List |
---|---|---|---|
类型 | 数据结构元素 | 核心 | 是一种链式存取的数据结构 |
男士手链牌子好推荐卡地亚手镯改变了首饰在时尚中的角色,它不再只是衣服的附庸,而成为可以独自闪耀的亮点。手镯上的小小螺丝钉,成就了世界珠宝史上的一个经典传奇,多年来,令无数名流雅士魂牵梦绕,时刻追随。或...
佩戴手链其实是没什么讲究的。平时佩戴手链都是为了美观好看,所以左右手都是可以的。 ...
黄金手链表不错,价格在999元,黄金手链表将外壳选择了非常通透的超强塑料,保证内部零件的安全,而且有着非常好听的名字叫做随性幻影,以上价格来源于网络,仅供参考,具体价格已购买时为准。
WORD 格式可编辑 专业知识 整理分享 数据结构实验报告 姓名 学号 专业班 级 指导教师 实验时间 11月 9日 实验地 点 计算中心 实验二 单链表实验 1. 实验目标 ① 熟练掌握线性表的链式存储结构。 ② 熟练掌握单链表的有关算法设计。 ③ 根据具体问题的需要, 设计出合理的表示数据的链式存储结构, 并设计相关算 法。 2. 实验内容和要求 Ⅰ .实验要求 ① 本次实验中的链表结构指带头结点的单链表 ② 单链表结构和运算定义, 算法的实现以库文件方式实现, 不得在测试主程序中 直接实现;比如存储、算法实现放入文件: linkedList.h ③ 实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求; ④ 程序有适当的注释。 Ⅱ .实验内容 <1>尾插法创建单链表,打印创建结果。 <2>头插法创建单链表,打印创建结果。 <3>销毁单链表。 <4>求链表长度。 <5>
首先简要介绍了数据的存储结构,然后描述了该算法在变化事件存储和转发中的实际应用,展现了数组型单链表的简单性、可靠性和实用性,并用C语言具体实现,最后探讨了其在实际使用中需采取的各种关键防误措施。
#include<iostream>
using namespace std;
struct Number //链表的类型
{
char data; //链表当前结点的值
struct Number *next; //链表当前结点指向下一结点的指针
}*number;
void CreateList(Number *&L) //创建链表
{
Number *s,*r; //定义两个链表类型的临时指针
char x; //定义一个临时字符变量
L=(Number *)malloc(sizeof(Number)); //为头结点开辟空间
L->next=NULL; //此时头结点的后继指针和前驱指针赋值为空
r=L; //是r指针指向头结点
x=getchar(); //用x接受一个从键盘输入的字符
while(x!='\n') //控制当输入回车键时结束
{
s=(Number *)malloc(sizeof(Number)); //开辟下一结点的空间
s->data=x;
r->next=s; //r的后继指针指向s
r=s; //是s指向r
x=getchar(); //用x接受一个从键盘输入的字符
}
r->next=NULL; //当创建结束时,r的后继指针为空
}
void PrintList(Number *L) //输出链表
{
Number *p=L->next; //定义一个临时指针并指向链表的第一个结点
while(p!=NULL) //判断结点是否为空,空就结束
{
cout<<p->data; //输出结点的值
p=p->next; //指向下一个结点
}
cout<<endl; //换行
}
void InverseList(Number *L) //链表的逆置
{
Number *p=L->next,*q=L->next;
q=q->next;
p->next=NULL;
p=q;
while(p!=NULL)
{
q=q->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void DestroyList(Number *&L) //销毁链表
{
Number *p=L,*q=p->next;
while(q!=NULL)
{
free(p); //释放p的空间
p=q;
q=p->next;
}
cout<<"释放链表"<<endl;
}
int main()
{
cout<<"请输入一个链表:";
CreateList(number); //调用创建链表
cout<<"********************************************************************************";
cout<<"输入的链表为:"<<endl;
PrintList(number); //调用输出链表
InverseList(number); //调用逆置链表
cout<<"此链表的逆置为:"<<endl;
PrintList(number); //调用输出链表
cout<<"********************************************************************************";
DestroyList(number); //调用销毁链表的函数
return 0;
}
1、链表的抽象数据类型定义为:
ADTNumber{
数据对象: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已存在。
操作结果:将链表逆置。
DestroyList(&L)
初始条件:链表L已存在。
操作结果:销毁链表L。
}ADTNumber
2、本程序包含五个模块:
(1)主程序模块:
int main(){
定义变量;
接受命令;
处理命令;
退出(return 0);
}
(2)创建链表模块--产生一个链表;
(3)输出链表模块--把链表输出;
(4)链表逆置模块--将链表逆置;
(5)销毁链表模块--程序结束后释放链表开辟的空间。
各模块之间的调用关系如下:
主程序模块 创建链表模块
创建链表模块 输出链表模块 链表逆置模块
输出链表模块 创建链表模块 销毁链表模块
1、本程序由用户输入运行命令和数据,运行结果显示在其后。
2、程序执行的命令包括:
1)创建一个链表;2)执行链表的逆置;3)结束。
2、测试数据
链表:abc123