在資料結構中,有兩個知識體系特別重要,分別是棧和佇列。兩個定義方法很類似,區別在於棧是先入後出,佇列是先入先出。
棧:一種先入後出的操作,主要以順序棧為基礎,棧其實類似與小時候的玩具槍的彈夾,最先按進去的子彈,最後才會發射。
棧的順序實現:
#pragma once
#include #include #include #include #define max_size 100
typedef int sdatatype;
typedef struct stack stack;
// 初始化
void stackinit(stack *pstack)
// 壓棧
void stackpush(stack *pstack, sdatatype data)
// 出棧
void stackpop(stack *pstack)
// 返回棧頂元素
sdatatype stacktop(stack *pstack)
// 判斷是否為空
// 1 空
// 0 不空
int stackisempty(stack *pstack)
else return 1;
}// 返回資料個數
int stacksize(stack *pstack)
void teststack()
printf("\n");
}
這是棧的順序儲存,常用的比較多。
佇列:佇列是一種先入先出的結構,和我們日常生活中的排隊特別相似,排在隊頭的人,第乙個享受服務。
佇列中鏈式佇列使用的較多,這次主要以鏈式佇列為主。
鏈式佇列**:
#pragma once
#include #include #include typedef int qdatatype;
typedef struct qnode qnode;
typedef struct queue queue;
// 初始化
void queueinit(queue *pqueue)
// 入佇列
void queuepush(queue *pqueue, qdatatype data)
pqueue->prear->pnext = pnewnode;//此時隊尾元素的下乙個指向新元素
pqueue->prear = pnewnode;//將隊尾重置
}// 出佇列
void queuepop(queue *pqueue)
}// 返回隊首元素
qdatatype queuefront(queue *pqueue)
// 判斷是否為空
// 1 空
// 0 不空
int queueisempty(queue *pqueue)
// 返回資料個數
int queuesize(queue *pqueue)
void testqueue()
printf("\n");
}
至此,棧與佇列的**就顯示完畢,大多數的操作已經在**中體現出來,博主就不贅言太多,因為**就是博主最想表露的心聲。 資料結構 棧與佇列
題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...
資料結構 棧與佇列
棧的原則是後進先出,即插入與刪除元素均在棧頂進行。獲取棧頂元素 s.top 佇列的原則是先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行。獲取隊頭元素 q.front 思路 用兩個棧,乙個棧用來進隊,乙個棧用來出隊,當資料進入佇列的時候,我們將其壓入乙個棧,當資料出隊的時候,我們將儲存在棧內的資料...
資料結構 棧與佇列
1.順序棧 基本操作 typedef int elemtype 定義 順序棧 typedef struct sqstack 判空 bool stackempty sqstack s 進棧 bool push sqstack s elemtype x 出棧操作 bool pop sqstack s e...