資料結構 線性表 鏈 棧 佇列

2021-09-02 23:29:44 字數 2188 閱讀 2416

//線性表的動態分配順序儲存結構

typedef int elemtype;

struct sqlist

;//單鏈表儲存結構

typedef struct lnode

lnode,

*linklist;

//雙向鍊錶儲存結構

typedef struct dulnode

dulnode,

*dulinklist;

//棧的順序儲存結構

typedef int selemtype;

typedef struct

sqstack;

//單鏈佇列儲存結構

typedef int qelemtype;

typedef struct qnode

*queueptr;

struct linkqueue

;//迴圈佇列

#define maxqsize

100struct sqqueue

;void

union

(sqlist &la, sqlist lb)

}// 歸並非遞減線性表la和lb得到新的線性表lc,lc的資料元素也按值非遞減排列

void

mergelist_1

(sqlist la, sqlist lb, sqlist &lc)

else

}// 以下兩個while迴圈只會有乙個被執行

while

(i<=la_len)

// 表la非空且表lb空

while

(j<=lb_len)

// 表lb非空且表la空

}//歸並非遞減la,lb單鏈表得到非遞減lc單鏈表

void

mergelist_2

(linklist la, linklist lb, linklist &lc)

else

} pc-

>next = pa ? pa : pb;

free

(lb);

lb =

null;}

//單鏈表逆置

void

reverse_1

(linklist l)l

= q;

//l始終保持指向第乙個結點

}void

reverse_2

(linklist l)}

void

reverse_3

(linklist l)l

->next = p;

returnl;

}//刪除單鏈表最小值結點

linklist delete_min

(linklist &l)

pre = p;

p = p-

>next;

} minpre-

>next = minp-

>next;

free

(minp)

;returnl;

}//反向輸出單鏈表結點值

void

r_print

(linklist l

)//帶頭結點單鏈表查詢倒數第k個位置上的結點

boolean searcf_k

(linklist l

, int k)

else}if

(count < k)

return

false

;else

}//利用棧將佇列元素逆置

void

inverser

(stack s

, queue q

)while(!

stackempty(s

))}//將迴圈佇列前後對稱的兩元素交換位置

void

sqreverse

(sqqueue &q)

}//兩個等長公升序序列a,b,找出a和b的中位數

int m_search

(int a

, int b

, int n)

else

}else

//第三種情況

else}}

return

a[s1]

<

b[s2]?a

[s1]:b

[s2]

;}

資料結構 線性表鏈式儲存

對於線性鍊錶,有兩種表示方法,一種是包含頭節點的情況,如下圖 一種是不包含頭節點的情況,如下圖 本文中對線性鍊錶的表示,利用的是帶頭節點的定義方式。使用c 實現了線性鍊錶建立,初始化,刪除,插入,清空,遍歷,有序鍊錶合併等操作。煉表頭 頭指標 頭結點 煉表頭 指的是線性表第乙個元素所在結點 頭指標 ...

資料結構 線性表(鏈式儲存)

1 順序表 需要一片連續的記憶體空間,成員可以隨機訪問,訪問效率高 插入刪除資料存在資料搬移的現象,效率低 儲存密度高 鍊錶的特點 不需要連續的記憶體空間,不能隨機訪問元素,訪問效率低 插入刪除資料不存在資料搬移的現象,效率高 儲存密度比較低 2 無頭鍊錶 第乙個節點為資料節點,加入刪除第乙個節點,...

資料結構 線性表(鏈式 單)

線性表是最常用且最簡單得一種資料結構。簡言之,乙個線性表是n個資料元素得有限序列。typedef int elemtype typedef struct lnodelnode,linklist ifndef linklist h define linklist h include include t...