链表数据结构(链表数据结构python)

本篇文章给大家谈谈链表数据结构,以及链表数据结构python对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

单链表的结构

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

单链表简介

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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表