用兩個棧實現佇列

2021-06-20 02:02:29 字數 3182 閱讀 3369

題目1:(難度1) 

輸入乙個字串,判斷它是不是回文字串。 

題目2:(難度2) 

用兩個棧實現佇列 

假設你擁有一種棧結構,使用兩個棧實現下面的佇列結構,要求支援 push 和 pop 操作: 

typedef struct queue 

queue; 

第一題

#include #include #define len 100

void reversestring(char * input,char * output,int n);

int main(void)

void reversestring(char * input,char * output,int n)

stack;

typedef struct queue

queue;

queue createqueue(void);

void queuepush(queue *queue,int data);

int queuepop(queue *queue);

void stackpush(stack **top_ptr,int data);//push會改變棧頂,應使用二級指標,即若棧頂為top,則引數為&top

int stackpop(stack **top_ptr);

int stackisempty(stack *top);

int main()

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

printf("pop number %d from the queue\n",queuepop(&queue));

for(i=10;i<15;i++)

for(i=0;i<10;i++)

printf("pop number %d from the queue\n",queuepop(&queue));

return 0;

}queue createqueue(void)

void queuepush(queue *queue,int data)

int queuepop(queue *queue)

void stackpush(stack **top_ptr,int data)

int stackpop(stack **top_ptr)

int stackisempty(stack *top)

同學用陣列實現stack的第二題 

#include #include #include #include #undef mprint

#define mdebug

#ifdef mdebug

# define mprint(fmt, args...) printf("file: %s, line: %d. "fmt, __file__, __line__, ##args);

#else

# define mprint(fmt, args...)

#endif // mdebug

//stack

typedef int element_t;

typedef struct mstack stack_t;

stack_t *stack_init(int n);

int stack_empty(stack_t *s);

int stack_full(stack_t *s);

void push(stack_t *s, element_t x);

element_t pop(stack_t *s);

//queue

typedef struct mqueue queue_t;

queue_t *queue_init(int n);

int queue_empty(queue_t *q);

int queue_full(queue_t *q);

void enqueue(queue_t *q, element_t x);

element_t dequeue(queue_t *q);

#define q_max 10

int main(int argc, char **argv)

printf("\ndequeue: ");

while (!queue_empty(q))

printf("\n");

return 0;

}stack_t *stack_init(int n)

s->stack_size = n;

s->stack_count = 0;

s->st = malloc(sizeof(*s->st)*s->stack_size);

if (null == s->st)

memset(s->st, 0, sizeof(*s->st)*s->stack_size);

return s;

}int stack_empty(stack_t *s)

int stack_full(stack_t *s)

void push(stack_t *s, element_t x)

}element_t pop(stack_t *s)

return s->st[--s->stack_count];

}queue_t *queue_init(int n)

q->q_size = n;

q->q_count = 0;

q->s1 = stack_init(q->q_size);

if (null == q->s1)

q->s2 = stack_init(q->q_size);

if (null == q->s2)

return q;

}int queue_empty(queue_t *q)

int queue_full(queue_t *q)

void enqueue(queue_t *q, element_t x)

while (!stack_empty(q->s2))

q->q_count ++;

push(q->s1, x);

}element_t dequeue(queue_t *q)

while (!stack_empty(q->s1))

q->q_count --;

return pop(q->s2);

}

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

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...

用兩個棧實現佇列與用兩個佇列實現棧

pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...

用兩個棧實現佇列 與 用兩個佇列實現棧

用兩個棧實現乙個佇列的功能?要求給出演算法和思路 分析 入隊 將元素進棧a 出隊 判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進棧b,棧b出棧 如果不為空,棧b直接出棧。用兩個佇列實現乙個棧的功能?要求給出演算法和思路 分析 入棧 將元素進佇列a 出棧 判斷佇列a中元素的個數是否...