資料結構 線性表

2021-10-09 19:22:40 字數 3626 閱讀 1499

線性表:n個具有相同型別的資料元素的有限序列

長度:線性表中資料元素的個

空表:長度等於零的線性表

相鄰資料元素的序偶關係,a1無前驅,an無後繼

順序表sequential list

用一段位址連續的儲存單元,依次儲存線性表中的資料元素

線性表中元素序號是從1開始的,線性表中第i個元素儲存在陣列中下標為i-1的位置

陣列需要分配固定長度的陣列空間,陣列的長度要大於當前線性表的長度(線性表中可以進行插入操作),陣列長度maxsize>線性表長度length

順序表的實現

const

int maxsize=

100;

class

seqlist

seqlist ::

seqlist()

//表的初始化,建乙個空表

seqlist ::

seqlist

(datatype a,

int n)

//建立順序表

int seqlist ::

empty()

//判空,只需判斷length是否為0

int seqlist ::

length()

//長度

void seqlist ::

printlist()

//遍歷操作

datatype seqlist ::

get(

int i)

//按位查詢

void linklist ::

insert

(int i, datatype x)

//插入操作

if(p==

null

)throw

"插入位置錯誤"

;//沒有找到第i-1個結點

else

}

鏈式儲存結構類似於叫號,不用排隊,但不僅要存放自己的資料還要存放乙個指標

單鏈表singly linked list

動態儲存分配—>執行時分配空間

邏輯次序和物理次序不一定相同;元素之間的邏輯關係用指標表示

data:儲存資料元素

next:儲存指向後繼節點的位址

頭指標first:指向第乙個結點的儲存位址

尾標誌:終端結點的指標域為空

空表:first=null

頭結點:在第乙個元素結點之間附設乙個型別相同的結點node(簡化了對邊界的處理——插入、刪除、構造等)

//結點結構定義

//初始化單鏈表

int linklist ::

empty()

//空單鏈表滿足條件

void linklist ::

printlist()

//遍歷操作

cout<

}int linklist ::

length()

//求長度

return count;

//注意count的初始化和返回值之間的關係

}datatype linklist ::

get(

int i)

//按位查詢

if(p ==

null

)throw

"查詢位置錯誤"

;else

return p-

>data;

}int linklist ::

locate

(datatype x)

//按值查詢

return0;

//退出迴圈表明查詢失敗

}void linklist ::

insert

(int i, datatype x)

//插入操作

if(p ==

null

)throw

"插入位置錯誤"

;//沒有找到第i-1個結點

else

}datatype linklist ::

delete

(int i)

//刪除操作

if(p ==

null

|| p-

>next ==

null

)throw

"刪除位置錯誤"

;else

}void linklist ::

linklisthead

(datatype a,

int n)

//頭插法

}linklist ::

linklistrear

(datatype a,

int n)

//尾插法

r->next =

null

;//單鏈表建立完畢,將終端結點的指標域置空

} linklist ::

~linklist()

//析構函式,銷毀單鏈表

}

單鏈表的使用

#include

using

namespace std;

#define datatype int

struct node

;class

linklist

;//。。。。。

intmain()

,i,x;

linklist l;

l.linklisthead

(r,5);

l.linklistrear

(r,5);

//只執行尾插法

cout<<

"當前線性表為"

; l.

printlist()

; cout<<

"線性表長度:"

<

length()

<

trycatch

(char

*str)

cout<<

"當前線性表的長度"

<

length()

<

cout<<

"輸入查詢元素值"

; cin>>x;

i = l.

locate

(x);

if(i>0)

cout<<

"元素"

<

"的位置為:"

<

else

cout<<

"單鏈表中沒有元素"

<

trycatch

(char

*str)

return0;

}

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...