//線性表的動態分配順序儲存結構
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...