兩棧來實現佇列功能

2021-09-25 05:55:37 字數 1152 閱讀 7818

用兩棧來實現佇列功能

首先棧的**

檔名 stack_list.h

#include

#include 「stack_list.h」

node* creat_node(type data) //建立乙個節點

// 建立

stack* creat_stack(void)

// 銷毀

void destory_stack(stack* stack)

// 棧空

bool empty_stack(stack* stack)

// 入棧

void push_stack(stack* stack,type data)

// 出棧

bool pop_stack(stack* stack)

// 棧頂

type* top_stack(stack* stack)

然後是棧和佇列的

#include

#include 「stack_list.h」

typedef struct queue

queue;

// 建立

queue* creat_queue(void)

// 銷毀

void destory_queue(queue* queue)

// 隊空

bool empty_queue(queue* queue)

// 入隊

void push_queue(queue* queue,type data)

// 出隊

bool pop_queue(queue* queue,type* p)

// 如果s2裡有元素,直接從s2裡面出隊

// 如果從s1裡提出元素到s2,則必須全部提出

if(empty_stack(queue->s2))

}*p = *top_stack(queue->s2);

return pop_stack(queue->s2);

}int main()

for(int i=0; i<5; i++)

printf("--------------------------\n");

for(int i=10; i<20; i++)

for(int i=0; i<15; i++)

用兩個棧來實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。利用兩個棧都是後進先出的特性,可以實現負負得正的效果。即每次入棧都進入stack1,每次出棧先在stack2出棧,若stack2為空,則將stack1的元素全部出棧,按序入棧stack2,然後stack2出棧乙個元素即...

用兩個棧實現佇列 及 兩個佇列實現棧功能

最近筆試遇到這個問題,感覺蠻有意思的,分析看看 一 問 用兩個棧實現乙個佇列的功能,要求給出演算法和思路 示意圖 答 設2個棧a,b,初始化為空 入隊 將新元素push入棧a 出隊 1 判斷棧b是否為空 2 如果不為空,則將棧a中所有元素依次pop出並push到棧b 3 將棧b的棧頂元素pop出 說...

兩個棧實現佇列的功能

分析 設定兩個棧s1 s2,一開始均為空。入隊 將新元素push入s1。出隊 1 判斷棧s2是否為空 2 如果s2為空,把s1中的所有元素全部pop出並且push到s2中,從s2中pop出棧頂元素即可出列 3 如果s2不為空,直接從s2中pop出棧頂元素即可出列 int enqueue int e ...