棧佇列 使用兩個棧實現乙個佇列

2021-08-21 19:56:59 字數 1580 閱讀 8632

棧佇列:使用兩個棧實現乙個佇列

思路:

1.入佇列,是將資料放入棧1

2.出佇列,是將棧1資料出棧後依次存入棧2,然後棧2進行出棧

這樣就模擬了佇列的 先進先出 思想

1.stack.h

#pragma once

#include

#include

#include

// 棧實現

typedef

int sdatatype;

#define max_size (100)

//棧結構定義:陣列 棧頂

typedef

struct stack stack; // 1.表示有效資料個數 2.top 下標表示當前可用位置

//初始化

void stackinit(stack *ps)

// 入(壓)棧

void stackpush(stack *ps, sdatatype data)

// 出棧

void stackpop(stack *ps)

// 返回棧頂元素,

sdatatype stacktop(stack *ps)

// 判斷棧是否為空

// 1 表示空, 0 表示非空

int stackisempty(stack *ps)

// 返回棧資料個數

int stacksize(stack *ps)

// 棧拷貝

void stackcopy(stack *pdest, stack *psrc)

void teststack()

2.squeue.h

#pragma once

#include

"stack.h"

#include

/* 棧佇列:使用兩個棧實現乙個佇列

思路:1.入佇列,是將資料放入棧1

2.出佇列,是將棧1資料出棧後依次存入棧2,然後棧2進行出棧

這樣就模擬了佇列的 先進先出 思想

*/// 棧佇列結構定義

typedef struct squeue squeue;

// 棧佇列初始化:也就是對佇列裡面的兩個棧進行初始化

void squeueinit(squeue *psq)

// 入佇列

void squeuepush(squeue *psq, sdatatype data)

// 出佇列

void squeuepop(squeue *psq)

}//棧2出棧

stackpop(p2);

}// 返回佇列首元素值

sdatatype squeuefront(squeue *psq)

}return stacktop(p2);

}void testsqueue()

3.main.c

#include "squeue.h"

int main()

兩個棧實現乙個佇列 兩個佇列實現乙個棧

這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...

兩個棧實現乙個佇列,兩個佇列實現乙個棧

1 兩個棧實現乙個佇列 入隊時,直接壓入stack1中。出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。入隊操作 void enqueue stack s1,stack s2,int m 出隊操作 void deq...

兩個棧實現乙個佇列 兩個佇列實現乙個棧

方法一 public class main 出棧操作 public int deletehead while stack1.isempty return stack2.pop 方法二 public class main public int deletehead throws exception i...