一、雙鏈表
在單鏈表的基礎上再增加乙個指向它前驅的指標,就構成了雙鏈表。二、雙鏈表操作和實現所以雙鏈表有三個變數:資料資訊info、前驅指標llink、後繼指標rlink。
由於雙鏈表也為單鏈表的一種變型,一些相似的操作就沒一一枚舉,可以參考資料結構(四)——單鏈表 、帶頭結點的單鏈表、迴圈鍊錶 及其實現1、資料結構1、資料結構
2、在i位置插入結點
3、在y元素後插入結點
4、刪除值為x的結點
[cpp]view plain
copy
print?
typedef
intdatatype;
typedef
struct
dlink_nodednode;
2、在i位置插入結點
[cpp]view plain
copy
print?
include
"linklist.h"
node* insert_link_list_index(node *head,int
index,datatype x)
if(index == 0)
head->llink = q; //非空鍊錶首插入
q->rlink = head;
q->llink = null;
head = q;
return
head;
} else
ptr->rlink = p; //鍊錶尾插入
p->llink = ptr;
p->rlink = null;
return
head;
} }
3、在y元素之後插入
[cpp]view plain
copy
print?
#include"linklist.h"
node* intsert_node_yx(node *head,datatype x,datatype y)
node *p = (node*)malloc(sizeof
(node));
p->info = x;
if(!q->rlink)
p->rlink = q->rlink; //中間結點
q->rlink->llink = p;
q->rlink = p;
p->llink = q;
return
head;
}
4、刪除值為x的結點
[cpp]view plain
copy
print?
#include"linklist.h"
node* del_link_list_node(node* head,datatype x)
node* ptr=head;
while
(!ptr && ptr->info != x)
if(!ptr)else
if(ptr == head && ptr->rlink)else
if(ptr == head && !ptr->rlink)
}else
if(!ptr->rlink)else
free(ptr);
return
head;
}
三、鏈式棧
棧的鏈式儲存稱為鏈式棧。它的插入和刪除規定在單鏈表的同一端進行,棧頂指標用top表示。1、輸出各個結點的值1、輸出各個結點的值
2、取得棧頂元素
3、入棧
4、出棧
[cpp]view plain
copy
print?
#include"linklist.h"
void
display_link_list(node *stack)else
} }
2、取得棧頂元素
[cpp]view plain
copy
print?
#include"linklist.h"
node* get_top(node *stack)
return
stack->info;
}
3、入棧
[cpp]view plain
copy
print?
#include"linklist.h"
node* push(node* stack,datatype x)
4、出棧
[cpp]view plain
copy
print?
#include"linklist.h"
node* pop(node *stack,datatype *x)
node *p = stack;
stack=stack->next;
*x = p->info;
free(p);
return
stack;
}
四、鏈式佇列
以佇列形式儲存的鏈式佇列,插入和刪除在單鏈表的不同端進行,隊首和隊尾指標存在乙個資料結構中。1、結構定義1、結構定義2、建立乙個空佇列
3、判斷是否為空
4、取得首節點值
5、輸出各個結點
6、入列
7、出列
[cpp]view plain
copy
print?
typedef
intdatatype;
typedef
struct
link_queue_nodenode;
typedef
struct
queuequeue;
2、建立乙個空佇列
[cpp]view plain
copy
print?
#include"linkqueue.h"
queue* init_link_queue()
3、判斷是否為空
[cpp]view plain
copy
print?
#include"linkqueue.h"
intis_empty_link_queue(queue *q)
4、取得首節點值
[cpp]view plain
copy
print?
#include"linkqueue.h"
datatype* get_head(queue *q)
return
q->front->info;
}
5、輸出各個結點
[cpp]view plain
copy
print?
#include"linkqueue.h"
void
display_link_queue(queue *q)else
} }
6、入列
[cpp]view plain
copy
print?
#include"linkqueue.h"
queue* en_list_queue(queue *q,datatype x)else
return
q;
}
7、出列
[cpp]view plain
copy
print?
#include"linkqueue.h"
queue* del_link_queue(queue *q,datatype *x)
node *p = q->front;
if(q->front == q->rear)else
*x = p->info;
free(p);
return
q;
}
資料結構(五) 雙鏈表 鏈式棧 鏈式佇列 及實現
一 雙鏈表 在單鏈表的基礎上再增加乙個指向它前驅的指標,就構成了雙鏈表。所以雙鏈表有三個變數 資料資訊info 前驅指標llink 後繼指標rlink。二 雙鏈表操作和實現 由於雙鏈表也為單鏈表的一種變型,一些相似的操作就沒一一枚舉,可以參考資料結構 四 單鏈表 帶頭結點的單鏈表 迴圈鍊錶 及其實現...
鏈式棧 鏈式佇列 順序佇列
暑期學習第一天,學習了鏈式棧 鏈式佇列和順序佇列 這三種都是舉一反三的型別 鏈式棧標頭檔案 ifndef stack h define stack h define ok 0 define error 1 結點 typedef struct stacknode stacknode 棧 typedef...
雙端鏈式佇列實現
雙端佇列,使用雙向鍊錶實現 隊頭 隊尾都可以進行入隊 出隊操作的佇列 雙端佇列的每一端都是乙個棧,都符合棧先進後出的特性 雙端佇列是一種多功能的資料結構,可以使用它來提供佇列和棧兩種功能 include include queue.h typedef struct doublelinknodedou...