一.單鏈表結點的型別定義:普通結構體變數或者指向結構體的指標變數
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 ...