#資料結構 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 什麼是堆疊 先進後出,後進先出的線性表就是堆疊,相當於對線性表的操作做一些特殊的限制 堆疊 有一...