當前位置:首頁 » 服務存儲 » 數據結構中鏈式存儲的定義
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

數據結構中鏈式存儲的定義

發布時間: 2023-02-15 05:58:52

① 二叉樹的鏈式存儲結構的數據結構定義、創建、先序和後序遍歷,並將結果序列輸出。

1、建立一個單鏈表,並從屏幕顯示單鏈表元素列表。

2、從鍵盤輸入一個數,查找在以上創建的單鏈表中是否存在該數;如果存在,顯示它的位置;如果不存在,給出相應提示。

3、在上述的單鏈表中的指定位置插入指定的元素

4、刪除上述單鏈表中指定位置的元素。

源程序:頭文件

#include<iostream.h>
#include<malloc.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(){ //功能列表
cout<<endl <<" **********功能**********"<<endl
<<" * 1.輸出單鏈表的全部數據*"<<endl
<<" * 2.查找鏈表元素 *"<<endl
<<" * 3.鏈表插入元素 *"<<endl
<<" * 4.鏈表刪除元素 *"<<endl
<<" * 5.結束 *"<<endl
<<" ************************"<<endl
<<"請輸入所需功能: ";
}

//*******查看輸入的全部數據*********
void PrintList(LinkList L){
LinkList p;
cout<<endl<<"你輸入的數據為: ";
p=L->next; //從頭結點開始掃描
while(p){ //順指針向後掃描,直到p->next為NULL或i=j為止
cout<<p->data;
p=p->next; }
cout<<endl; }

//逆序輸入 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;
cin>>p->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 && j<i) { p = p->next; ++j; } // 順指針向後查找,直到 p 指向第 i 個元素或 p 為空
if ( !p || j>i )
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;
int j;
p = L; j = 0;
while (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;
}

#include"LinkList.h"
void main()
{LinkList L;
int n,choice,i;
ElemType e;
about();
cout<<"請輸入鏈表中元素的個數";
cin>>n;
CreateList_L(L, n);
showmenu(); //功能列表
cin>>choice;
while(choice!=5)
{ //輸入時候退出程序
switch(choice){
case 1:PrintList(L);break; //1.查看輸入的全部數據
case 2:{
cout<<"輸入你要查找的元素的位置: ";
cin>>i;GetElem_L(L, i, e);
cout<<"第"<<i<<"個元素的值是"<<e<<endl;
break;} //2.查找鏈表元素
case 3:
{cout<<"請輸入你要插入元素的位置i: ";
cin>>i;
cout<<endl<<"請輸入你要插入元素的值: ";
cin>>e;
ListInsert_L(L, i,e);
break;} //3.鏈表插入元素
case 4:
{cout<<"請輸入你要刪除元素的位置";
cin>>i;
ListDelete_L(L, i, e) ;
break;} //4.鏈表刪除元素
default:cout<<"輸入錯誤,請輸入-5,輸入重顯示功能表^_^ "<<endl;
}
cout<<endl<<"輸入功能序號:";
cin>>choice;
}

}

② 數據結構的鏈式存儲中之中是用於表示數據間的關系這句話對嗎

鏈式存儲結構中每個結點除了包含信息域之外,還至少包含 一個指針域。鏈式存儲結構是用指針來體現數據元素之間的邏輯關系的。利用這種結構,各個數據元素的存儲單元不再要求是連續的,即可以把邏輯上相鄰的兩個元素存放在物理上不相鄰的存儲單元中,還可以在線性編址的存儲器中表示非線性關系的結點。
鏈式存儲結構的主要特點為:
結點中除包含保存數據元素的自身信息的信息域外,還有表示數據元素之間的鏈接信息的指針域,因此比順序存儲結構的存儲密度低,存儲空間的利用率也較低。
邏輯上相鄰的數據元素在物理上不一定相鄰,可用於存儲線性表、樹、圖等多種邏輯結構。
插入、刪除操作比較靈活,不必移動數據元素,只要改變結點中的指針域的值即可。
鏈式結構是一種數據結構,學名鏈式存儲結構,又叫鏈接存儲結構。使用對象引用變數來創建對象間的鏈接。

它不要求邏輯上相鄰的元素在物理位置上也相鄰。因此它沒有順序存儲結構所具有的弱點,同時也失去了順序表可隨機存取的優點。
其特點主要表現為:
1、比順序存儲結構的存儲密度小;
2、插入、刪除靈活,結點可以被插入到鏈表的任何位置,首、中、末都可以,而且不必要移動結點中的指針;
3、鏈表的大小可以按需伸縮,是一種動態存儲結構,其實現的集合在增、刪方面性能更高;
4、查找結點時的效率就相對數組較低,只能從第一個結點開始順著鏈表逐個查找(這是他的缺點)。

高清播放機,圖片大全,點擊查看詳情!
精選推薦
廣告

數據結構篇——鏈式存儲
3483閱讀·0評論·0點贊
2019年2月18日
資料庫二級復習筆記(1)選擇題
1593閱讀·0評論·1點贊
2022年3月15日
數據結構—棧---鏈式存儲結構
115閱讀·0評論·1點贊
2022年9月20日
數據結構之順序存儲與鏈式存儲
6666閱讀·0評論·10點贊
2020年11月25日
數據結構-第二章(5)-鏈式存儲結構
1932閱讀·4評論·3點贊
2021年11月26日
(數據結構)靜態鏈表——概念、插入與刪除(程序)、優缺點
320閱讀·0評論·0點贊
2021年8月13日
高清播放機,圖片大全,點擊查看詳情!

精選推薦
廣告
鏈式存儲結構的特點
1.3W閱讀·1評論·2點贊
2017年10月31日
數據結構的鏈式存儲結構
3673閱讀·1評論·2點贊
2014年3月10日
數據結構——>鏈式存儲結構
4

③ 線性表順序存儲結構和鏈式存儲結構的定義,以及各自的有缺點,分別適合於哪些應用

定義

順序存儲結構就是用一組地址連續的存儲單元依次存儲該線性表中的各個元素。由於表中各個元素具有相同的屬性,所以佔用的存儲空間相同。
線性表按鏈式存儲時,每個數據元素 (結點)的存儲包括數據區和指針區兩個部分。數據區存放結點本身的數據,指針區存放其後繼元素的地址只要知道該線性表的起始地址表中的各個元素就可通過其間的鏈接關系逐步找到

優缺點
順序存儲需要開辟一個定長的空間,讀寫速度快,缺點不可擴充容量(如果要擴充需要開辟一個新的足夠大的空間把原來的數據重寫進去)

鏈式存儲無需擔心容量問題,讀寫速度相對慢些,由於要存儲下一個數據的地址所以需要的存儲空間比順序存儲大。

④ 線性表的鏈式存儲結構定義及基本操作

是這個效果嗎

⑤ 在數據結構中,線性表常用的存儲表示方式有哪兩種定義是什麼

順序存儲結構就是用一組地址連續的存儲單元依次存儲該線性表中的各個元素。由於表中各個元素具有相同的屬性,所以佔用的存儲空間相同。因此,在內存中可以通過地址計算直接存取線性表中的任一元素。這種結構的特點是邏輯上相鄰的元素物理上也相鄰。用順序結構存儲的線性表稱作順序表。 線性表按鏈式存儲時,每個數據元素 (結點)的存儲包括數據區和指針區兩個部分。數據區存放結點本身的數據,指針區存放其後繼元素的地址 (沒有後繼元素時設置為空字元(Null).。只要知道該線性表的起始地址 (記錄在頭指針中),表中的各個元素就可通過其間的鏈接關系逐步找到

⑥ 鏈式存儲隊列的數據結構(邏輯結構+存儲結構)分析、鏈式存儲隊列的基本c語言結構體分析與定義

鏈式隊列

鏈式存儲結構的隊列稱作鏈式隊列。

鏈式隊列的隊頭指針指在隊列的當前隊頭結點位置,隊尾指針指在隊列的當前隊尾結點位置。不帶頭結點的鏈式隊列時可直接刪除隊頭指針所指的結點。

鏈式隊列中結點的結構體可定義如下:

typedef struct qnode

{

DataType datal;

Struct qnode *next;

}LQNode;

為了方便參數調用,通常把鏈式隊列的隊頭指針front和隊尾指針rear也定義為如下的結構體類型LQueue:

typedef struct

{

LQNode *front;

LQNode *rear;

}LQueue;

鏈式隊列操作的實現

(1) 初始化QueueInitiate(LQueue *Q)

void QueueInitiate(LQueue *Q)

{

Q->rear=NULL;

Q->front=NULL;

}

(2)非空否QueueNotEmpty(LQueue Q)

int QueueNotEmpty(LQueue Q)

/*判斷鏈式隊列Q非空否,非空返回1,否則返回0*/

{

if(Q.front==NULL)return 0;

else return 1;

}

(3)入隊列QueueAppend(LQueue *Q,DataType x)

int QueueAppend(LQueue *Q,DataType x)

/*把數據元素x插入鏈式隊列Q隊列的隊尾,入隊列成功返回1,否則返回0*/

{

LQNode *p;

if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)

{

printf(「內存不足無法插入!\n);

return 0;

}

p->data=x;

p->next=NULL;

if(Q->rear!=NULL)Q->rear->next=p;

Q->rear=p;

if(Q->front==NULL)Q->front=p;

return 1;

}

(4)出隊列QueueDelete(LQueue *Q,DataType *d)

int QueueDelete(LQueue *Q,DataType *d)

/*刪除鏈式隊列Q的隊頭數據元素值到d,出隊列成功返回1,否則返回0*/

{

LQNode *p;

if(Q->front==NULL)

{

printf(「隊列已空無數據元素出隊列!\n」);

return 0;

}

else

{

*d=Q->front->data;

p=Q->front;

Q->front=Q->front->next;

if(Q->front==NULL)Q->rear=NULL;

free(p);

return 1;

}

}

(5)取隊頭數據元素QueueGet(LQueue *Q,DataType *d)

int QueueGet(LQueue *Q,DataType *d)

/*取鏈式隊列Q的當前隊頭數據元素值到d,成功返回1,否則返回0*/

{

if(Q.front==NULL)

{

printf(「隊列已空無數據元素出隊列!\n);

return 0;

}

else

{

*d=Q.front->data;

return 1;

}

}

(6)撤銷動態申請空間Destory(LQueue *head)

int Destory(LQueue *head)

{

LQNode *p,*p1;

p=Q.front;

while(p!=NULL)

{

p1=p;

p=p->next;

free(p1);

}

}
幫你轉的,我覺得他描述的很清楚。希望對你有幫助。

⑦ 數據結構基本概念

數據結構概念包含三方面:數據的邏輯結構、數據的存儲結構、對數據的操作
一、數據的邏輯結構

1、數據的邏輯結構是指數據元素之間的邏輯關系,用一個數據元素的集合和定義在此集合上的若干關系表示。

2、數據結構分為三種:線性結構、樹結構、圖
其中樹和圖是非線性結構。
(1)線性結構:是具有線性關系的數據結構,線性表的元素是有序數列,每個元素(除了頭和尾)有且僅有一個前驅和後繼。
(2)樹結構:數據元素之間具有層次關系的一種非線性結構,樹種數據元素通常稱為結點。樹結構的層次關系是指---->根結點沒有前驅結點,除了根以外的其他結點有且僅有一個父母結點,所有結點可有多個或零個後繼結點,或稱孩子結點。
(3)圖:每個數據元素可有多個前驅元素和多個後繼元素。

3、數據元素及其關系在計算機中的存儲表示或實現稱為「數據的存儲結構」,也稱物理結構

二、數據的存儲結構

1、數據的邏輯結構從邏輯關系的角度觀察數據,它與數據的存儲無關,獨立於計算機,而數據的存儲結構是邏輯結構在計算機內存中的實現,依賴於計算機。

2、數據的存儲結構基本形式有兩種:順序存儲結構、鏈式存儲結構
(通常數組實現順序存儲結構、鏈表實現鏈式存儲結構)
(1)順序存儲結構:使用一租連續的內存單元一次存放數據元素,數據元素在內存中的物理存儲順序與他們的邏輯順序相同,即每個元素與其前驅元素以及後繼元素的存儲位置相鄰。
(2)鏈式存儲結構:使用若乾地址分散的存儲單元存儲數據元素,邏輯上相鄰的數據元素在物理位置上不一定相鄰,數據元素之間的關系需要採用附加信息特別指定。通常像鏈表那樣,採用指針變數來記錄前驅和後繼元素的地址,c語言採用指針,Java採用引用。

三、對數據的操作

1、每中數據結構都需要一組對其元素實現特定功能的操作:
比如:初始化、判空、存、取、插入、刪除、排序等等操作。

四、數據類型與抽象數據類型

1、數據類型
類型是具有相同意義的一組值的集合,數據類型是指一個類型和定義在這個類型上的操作集合,數據類型定義了數據的性質,取值范圍以及對數據所能進行的各種操作。
(Java的基本數據類型包括:整數類型,浮點類型等等)

2、抽象數據類型
抽象數據類型是指一個數學模型以及定義在該模型上的一組操作。
比如復數的抽象數據類型:

3、數據抽象
是指「定義」和「實現」相分離,類似與介面的定義與實現。
四、數據結構基本區別

⑧ 鏈式存儲結構屬於線性結構還是非線性的存儲結構

鏈表是線性表的鏈式存儲結構
線性表的鏈式存儲表示的特點是用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。因此,為了表示每個數據元素與其直接後繼數據元素
之間的邏輯關系,對數據元素來說,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置)。由這兩部分信息組成一個「結點」,表示線性表中一個數據元素

鏈表(Linked
list)是一種常見的基礎數據結構,是一種線性表,但是並不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針(Pointer)。由於不必按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表:順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。在計算機科學中,鏈表作為一種基礎的數據結構可以用來生成其它類型的數據結構。
鏈表通常由一連串節點組成,每個節點包含任意的實例數據(data
fields)和一或兩個用來指向明上一個/或下一個節點的位置的鏈接("links")。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁碟上順序,數據的存取往往要在不同的排列順序中轉換。而鏈表是一種自我指示數據類型,因為它包含指向另一個相同類型的數據的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。
鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面向對象語言,如C,C++和Java依靠易變工具來生成鏈表。