c 語言資料結構 棧和佇列的相關操作

2022-09-23 02:51:12 字數 2491 閱讀 1913

目錄三,棧的鏈式儲存實現

佇列三,佇列的鏈式實現

只允許在一端進行插入或刪除操作的線性表。

見如下**片段,體會順序棧的定義:

#define maxsize 10

typedef struct sqstack;

void teststack()

//初始化棧

void initstack(sqstack &s)

//我們也可以知道如何判斷棧空

bool stackempty(sqstack s)

//新元素入棧

bool push(sqstack &s,elemtype x)

在棧頂彈出乙個元素,並用x 返回:

bool pop(sqstack &s,elemtype &x)
採用鏈式儲存的棧稱為鏈棧,其優點是便於多個棧共享儲存空間和提高其效率,且不存在棧滿上溢的情況。通常採用單鏈表實現,並規定所有的操作都是在單鏈表的表頭進行的。

現在再想一想,是不是在單鏈表中,表頭後插入乙個結點就相當於元素入棧的操作,在表頭後刪除乙個元素就相當於元素出棧。只不過入棧和出棧的操作都是在鍊錶的表頭進行的。

前面我們知道了棧是只允許在一端進行插入或刪除操作的線性表,那佇列呢?

佇列是只允許在一端進行插入,在另一端刪除的線性表。這個結合日常生活中的排隊來想,是不是非常簡單~

以下是佇列的幾種基本操作:

#define maxsize 10	//定義佇列中元素的最大個數

typedef struct sqqueue;

//初始化佇列

void initqueue(sqqueue &q)

//判斷佇列是否為空,就是頭,尾指標指向同乙個元素

bool queueempty(sqqueue q)

//入隊

bool enqueue(sqqueue &q,elemtype x)

上述程式中的判斷佇列是否已滿的操作我們後面再說,這裡的模運算操作其實就是將無限的整數域對映到有限的整數集合 上,將儲存空間在邏輯上變成了「環狀」。

只能讓隊頭元素出隊。刪除乙個隊頭元素,並用x 返回

bool dequeue(sqqueue &q,elemtype &x)
那如何知道佇列元素的個數呢?這裡有乙個公式,希望我們記住:(rear+maxsize-front)%maxsize,自己可以驗證一下這個公式的合法性。

**如下:

typedef struct linknodelinknode;

typedef structlinkqueue;

初始化佇列(帶頭結點)的實現:

void initqueue(linkqueue &q)

void testlinkqueue()

示意圖如下:

由此可知,判斷乙個佇列是否為空的**實現如下:

bool isempty(linkqueue q)
不帶頭結點的佇列初始化:

void initqueue(linkqueue &q)

//此時判斷佇列是否為空即隊頭指標為null

bool isempty(linkqueue q)

帶頭結點的新元素入隊操作只需要記得只能從隊尾新增元素即可,邏輯也比較簡單,直接見如下**片段:

void enqueue(linkqueue &q,elemtype x)
不帶頭結點新元素入隊,由於開始front、rear 指標都是指向 null 的,所以需要對其進行修改操作:

void enqueue(linkqueue &q,elemtype x)else

}

帶頭結點隊頭元素出隊操作,邏輯比較簡單,直接見**:

bool dequeue(linkqueue &q,elemtype &x)
不帶頭結點隊頭元素出隊,**如下:

bool dequeue(linkqueue &q,elemtype &x)

free(p);

return true;

}

最後,我們一定要多動手、勤思考,這樣我們才有可能攻陷資料結構!

資料結構 棧和佇列(c語言)

棧和佇列是兩種重要的線性結構。從資料結構角度來看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,他們是操作受限制的線性表,因此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向的程式設...

(C語言)資料結構 佇列 棧

12 佇列 queue 入隊 put 出對get 1 2 file queue linkedlist.c 3 4 佇列 queue 5 入隊 put 放在鍊錶尾部,並更新指向鍊錶尾部的指標tail 6 出隊 get 返回並刪除鍊錶頭部節點,並更新指向鍊錶頭部的指標head 7 8 9 include...

C語言資料結構 棧 佇列

ifndef zydl h define zydl h include head.h define stack int size 100 define stackincrement 10 define duqueue max size 10 define maxqsize 100 typedef i...