链表数据结构(链表数据结构python)
本篇文章给大家谈谈链表数据结构,以及链表数据结构python对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、单链表的结构
- 2、为什么数据结构链表最难
- 3、数据结构单链表
单链表的结构
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
单链表简介
1.概念介绍
链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
以“结点的序列”表示线性表称作线性链表(单链表),单链表是链式存取的结构。
2.链接存储方法
链接方式存储的线性表简称为链表(Linked List)。
链表的具体存储表示为:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时李码,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
3.结点结构
data域--存放结点值的数据域
next域--存放结点的直接后继的地址(位置)的指针域(链域)
链表通过每个结点的链域将线稿扰颤性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。
头指针head和终端结点
单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。链表由头指针唯一确定,单链表可以用头指针的名字来命名键败。
终端结点无后继,故终端结点的指针域为空,即NULL。
3.结点结构
为什么数据结构链表最难
数据结构对数学和思维能力要求较高,因此较难。
首先学习数据结构要有一陪孝定的C语言基础,另外学习数据结构要有学数学的头脑,也就是反数滚映要灵活。如果满足这两点就不难。但最重要的一点是要有兴趣,如果没有兴趣,即使有前两芦毕稿点也不会学的很好。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
数据结构单链表
#includeiostream.h
#includemalloc.h
typedef char ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
typedef struct LNode{
ElemType data;
LNode *next;
}LNode,*LinkList;void about(){ //版本信息
cout"单链表的操作";
}void showmenu(){ //功能列表
coutendl " **********功能**********"endl
" * 1.输出单链表的全部数据*"endl
" * 2.查找链表元素 *"endl
" * 3.链表插入元素 *"endl
" * 4.链表删除元素 *"endl
" * 5.结束 *"endl
" ************************"endl
"请输入所需功能: ";
}//*******查看输入的全部数据*********
void PrintList(LinkList L){
LinkList p;
coutendl"你输入的数据为: ";
p=L-next; //从头结点开始扫描
while(p){ //顺指针向后扫描,直到p-next为NULL或i=j为止
coutp-data;
p=p-next; }
coutendl; }//逆序输入 n 个数据元素,建立带头结点的单链表
void CreateList_L(LinkList L, int n) {
int i;
LinkList p;
L = new LNode;
L-next = NULL; // 先建立一个带头结点的单链表
cout"逆序输入 n 个数据元素,建立带改瞎头结点的单链表"endl;
for (i = n; i 0; --i) {
p = new LNode;
cinp-data; // 输入元素值
p-next = L-next; L-next = p; // 插入
}
} // L是带头结点的链表的头指针,以 e 返回第 i 个元素液橘
Status GetElem_L(LinkList L, int i, ElemType e) {
int j;
LinkList p;
p = L-next; j = 1; // p指向第一个结点,j为计数器
while (p ji) { p = p-next; ++j; } // 顺指针向后查找,直到 p 指向第 i 个元素或 p 为空
if ( !p || ji )
return ERROR; // 第 i 个元素不存在
e = p-data; // 取得第 i 个元素
return OK;
} //核埋空 本算法在链表中第i 个结点之前插入新的元素 e
Status ListInsert_L(LinkList L, int i, ElemType e) {
int j;
LinkList p,s;
p = L; j = 0;
while (p j i-1)
{ p = p-next; ++j; } // 寻找第 i-1 个结点
if (!p || j i-1)
return ERROR; // i 大于表长或者小于1
s = new LNode; // 生成新结点
if ( s == NULL) return ERROR;
s-data = e;
s-next = p-next; p-next = s; // 插入
return OK;
}Status ListDelete_L(LinkList L, int i, ElemType e)
{LinkList p,q;brint j;brp = L; j = 0;brwhile (p-next j i-1) { p = p-next; ++j; }
// 寻找第 i 个结点,并令 p 指向其前趋if (!(p-next) || j i-1)
return ERROR; // 删除位置不合理
q = p-next; p-next = q-next; // 删除并释放结点
e = q-data; free(q);
return OK;
}
void main()
{LinkList L;brint n,choice,i;brElemType e;brabout();brcout"请输入链表中元素的个数";brcinn;brCreateList_L(L, n);brshowmenu(); //功能列表 brcinchoice; brwhile(choice!=5)br{ //输入时候退出程序br switch(choice){br case 1:PrintList(L);break; //1.查看输入的全部数据br case 2:{br cout"输入你要查找的元素的位置: ";br cini;GetElem_L(L, i, e);br cout"第"i"个元素的值是"eendl;br break;} //2.查找链表元素
case 3:
{cout"请输入你要插入元素的位置i: ";br cini;br coutendl"请输入你要插入元素的值: ";br cine;br ListInsert_L(L, i,e);br break;} //3.链表插入元素
case 4:
{cout"请输入你要删除元素的位置";br cini;br ListDelete_L(L, i, e) ;br break;} //4.链表删除元素
default:cout"输入错误,请输入-5,输入重显示功能表^_^ "endl;
}
coutendl"输入功能序号:";
cinchoice;
}}
[img]关于链表数据结构和链表数据结构python的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。