資料結構 單鏈表操作(一) 基礎用法

2021-10-09 17:34:27 字數 2300 閱讀 1714

一.單鏈表結點的型別定義:普通結構體變數或者指向結構體的指標變數

typedef

int elemtype;

typedef

struct node

lnode,

*linklist;

宣告的相對應操作:

lnode *h,

*p;//定義乙個結點

linklist h,p;

//定義頭指標

(*p)表示p所指向的結點

(*p).data<=>p->data表示p指向結點的資料域

(*p).next<=>p->next表示p指向結點的指標域

二.申請一塊lnode型別的儲存單元的操作,並將其位址賦值給變數p

lnode *p;

p=new lnode;

三.鍊錶的相關操作

(1)初始化:定義工作指標p,鍊錶為帶頭結點的鍊錶

void

printlink

(linklist &l)

}

(2)鍊錶的遞迴遍歷操作

//正向輸出鍊錶

void

out1

(linklist l)

}//逆序輸出鍊錶

void

out2

(linklist l)

}

(3)求鍊錶的長度

//求鍊錶的長度

intlinklength

(linklist h)

return j;

}

(4)查詢表中第i個位置的元素

linklist touch

(linklist &h,

int x)

if(p==

null

)else

return p;

}

(5)查詢p的前驅節點

//查詢前驅結點

linklist listlocate2

(linklist h, lnode *p)

pre=h-

>next;

while

(pre!=

null

&&pre-

>next!=p)

if(pre==

null

)else

return pre;

}

(6)查詢p的後繼結點

//查詢後繼結點

linklist finddata

(linklist h,elemtype e)

if(p==

null

)else

if(p-

>next==

null

)else

return p-

>next;

}

(7)插入新結點(在p結點之後插入)

void

insert

(linklist h,lnode *p,

int x)

(8)插入新結點(在p結點之前插入)

void

insert

(linklist h,lnode *p,

int x)

s->data=x;

s->next=pre-

>next;

pre-

>next=s;

}

(9)頭插法建立鍊錶:時間複雜度為o(n),可以實現逆序操作

linklist1 creat()

//頭插法

return l;

}

(10)尾插法建立鍊錶,要定義尾指標,時間複雜度為o(n)

linklist2 creat()

return l;

}

(11)合併兩個(非遞減有序)鍊錶

linklist union

(linklist la,linklist lb)

else}if

(pa) pc-

>next=pa;

else pc-

>next=pb;

delete lb;

return lc;

}

資料結構 單鏈表 基礎

在實現單鏈表的基本功能後 單鏈表的幾個基本問題 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?順序表 物理位置相鄰 優點 在一段記憶體中用陣列連續存放,所以方便隨機查詢元素。缺點 動態開闢,容易造成記憶體浪費,需要乙個元素,開闢過多。前面新增元素時,要逐個挪動後面的每個元素,較麻煩。場...

資料結構基礎 單鏈表

關於單鏈表的一些基本操作,以下為基本思路 首先看一張直觀圖 鍊錶的結構體定義如下 為簡便,這裡的elemtype採用int 單鏈表 typedef struct lnode linklist 接下來肯定就是建立鍊錶,而目前建立單鏈表分為兩種方式,分別是 頭插法 與 尾插法 首先看圖示 清楚明白 我們...

資料結構篇 單鏈表基礎操作(二)

已知帶頭結點的單鏈表,存放一組整型數 建立n個元素的單鏈表 計算鍊錶中值大於x的結點的個數,int countx lnode head,int x 兩個鍊錶ha,hb存放整型數,每個鍊錶中無相同元素,hc ha hb,即ha和hb中相同元素放入hc中,void intersection lnode ...