資料結構第二講筆記之棧 佇列(2)

2021-08-17 10:13:33 字數 2703 閱讀 8342

#資料結構 record two#    #stack 、queue #

#堆疊#

棧是乙個先進後出的線性表,它僅允許在表的一端進行插入和刪除操作(運算受限的線性表)!

下面首先來看一看順序儲存實現的堆疊:

/*堆疊的順序儲存實現*/

/*本測試所用資料型別為int型*/

#include #include #define error -1

typedef int position;

typedef struct snode *stack;

struct snode;

/*建立乙個空棧*/

stack createstack(int maxsize)

/*判斷棧是否滿*/

bool isfull(stack s)

/*入棧操作*/

bool push(stack s , int x)

else

}/*判斷棧是否為空*/

bool isempty(stack s)

/*出棧操作*/

int pop(stack s)

else

}int main()

return 0;

}

結果如圖:

下面是堆疊的鏈式儲存的實現:

/*堆疊的鏈式儲存實現*/

/*本測試所用資料型別為int型*/

#include #include typedef struct snode *ptrtosnode;

struct snode;

typedef ptrtosnode stack;

#define error null

/*建立乙個空棧*/

stack createstack()

/*判斷棧是否為空*/

bool isempty(stack s)

/*入棧操作*/

bool push(stack s , int x)

/*出棧操作*/

int pop(stack s)

else

}//測試

int main()

return 0;

}

結果如圖:

#佇列#

和棧一樣,佇列也是一種操作受限制的特殊的線性表,特殊之處在於它們只允許在表的前端(隊頭)進行刪除元素操作,而在表的後端(隊尾)進行插入元素操作,因此佇列的元素遵循先進先出的操作順序。

實現順序儲存的迴圈佇列要注意的問題:

1.如何解決佇列中判空還是判滿?

(1)使用額外標記:size(入隊++ , 出隊--)或者tag(入隊置為1,出隊置為0,當隊頭等於隊尾時只要判斷最後一次的tag情況即可知此時佇列滿還是空);

(2)僅使用n-1個陣列空間

2.用求餘的方法來維持迴圈佇列。

下面是(迴圈)佇列的順序儲存實現:

/*佇列的順序儲存實現(測試)*/

/*本測試所用資料型別為int型*/

#include #include typedef int position;

struct qnode;

typedef struct qnode *queue;

/*建立乙個佇列*/

queue createqueue(int maxsize)

/*判斷佇列是否為滿*/

bool isfull(queue q)

/*入隊操作*/

bool addq(queue q , int x)

else

}/*判斷佇列是否為空*/

bool isempty(queue q)

#define error -1

/*出隊操作*/

int deleteq(queue q)

else

}int main()

return 0;

}

結過如圖:

下面是(迴圈)佇列的鏈式儲存實現:

/*佇列的鏈式儲存實現(測試)*/

/*本測試所用資料型別為int型*/

#include #include typedef struct snode *ptrtosnode;

struct snode;

typedef ptrtosnode position;

struct qnode;

typedef struct qnode *queue;

/*建立乙個空佇列*/

queue createqueue()

/*入隊操作*/

bool addq(queue q , int x)

/*判斷乙個佇列是否為空*/

bool isempty(queue q)

#define error -1

/*出隊操作*/

int deleteq(queue q)

else

else

frontelem = frontcell->data;

free(frontcell);

return frontelem;

}} int main()

return 0;

}

結果如圖:

資料結構筆記(二) 棧 佇列

一 棧 1 棧是一種後進先出,先進後出的資料結構。2 棧是一種操作受限的線性表,只允許在一端插入和刪除資料。3 棧主要包含2個操作,入棧和出棧 4 棧可以用陣列實現,也可以用鍊錶實現。用陣列實現的棧叫做順序棧,用鍊錶實現的棧叫做鏈式棧。例如 現在有乙個空瓶子。1 我們依次放入多個蘋果 2 從瓶子中取...

第二講 資料結構

include using namespace std const int n 100010 int e n ne n head 1,idx 向煉表頭插入乙個數x o 1 void add to head int x 在第k個插入的數後面插入乙個數x o 1 要用鍊錶那就是o n void add ...

資料結構 第二講 線性結構(堆疊和佇列)

堆疊和佇列都是對線性表做一些特殊的限制,形成了兩種儲存資料的結構,乙個是先進後出 乙個是先進先出 可以解決實際生活中遇到的一些問題,資料庫也可以理解成一種資料結構,只不過這種結構比較普通罷了。2.2.1 什麼是堆疊 先進後出,後進先出的線性表就是堆疊,相當於對線性表的操作做一些特殊的限制 堆疊 有一...