2.使用兩個棧實現乙個佇列
思想:建立兩個棧,乙個表示入佇列的棧input,乙個表示出佇列的棧output,由於佇列的特點為先進先出,而棧為後進先出,所以每次出佇列時,要將input中的值,入棧到output中,然後在出棧output;而入佇列時,將output中的值入棧到input中,然後將要入佇列的值入棧input中即可;
**實現:
#include #include #include "seqstack.h"
typedef struct queueby2stackqueueby2stack;
void queueinit(queueby2stack* q)
seqstackinit(&q->input);
seqstackinit(&q->output);
}void queuepush(queueby2stack* q,seqstacktype value)
//先把所有的output元素倒騰到input中
while(1)
seqstackpop(&q->output);
seqstackpush(&q->input,top);
} //把新元素value插入到input中
seqstackpush(&q->input,value);
return;
}void queuepop(queueby2stack* q)
//把input中的元素倒騰到output中
while(1)
seqstackpop(&q->input);
seqstackpush(&q->output,top);
} //把output的棧頂元素出棧
seqstackpop(&q->output);
return;
}int queuefront(queueby2stack* q,seqstacktype* value)
//將input中的元素倒騰到output中
while(1)
seqstackpop(&q->input);
seqstackpush(&q->output,top);
} return seqstacktop(&q->output,value);
}
test.c
#include #define test_header printf("\n*************************====%s*************************===\n",__function__)
void testqueueby2stack()
int main()
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...
棧和佇列面試題
1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...
棧和佇列面試題
採用順序棧實現棧基本操作 採用鏈式佇列實現佇列基本操作 define maxsize100 typedef int sdatatype typedef struct stack stack typedef struct minstack minstack void stackinit stack s...