劍指offer 面試題7 倆個棧實現佇列(c)

2021-07-01 20:19:54 字數 2847 閱讀 3623

首先要清楚棧和佇列的資料介面和各自的特點,棧:filo,佇列fifo,運用倆個棧,棧1filo,再將資料存入棧2又是filo,因而從整體輸入來看,在棧2中表現為fifo

主要思想如下:

(1)在佇列中定義倆個棧stack1,stcak2,stack1用於做佇列資料存入棧,stack2做佇列資料輸出棧

(2)資料進入存入棧stack1,

(3)執行佇列輸出時首先檢測stack2中是否存在資料,如果有直接從stack2中彈出即可(經歷了stack1的filo和stack2的filo,從原始輸入到stack2資料存放順序表現「fifo」和佇列一致了)

(4)如果stack2中沒有資料則將stack1中的資料依次入棧到stack2中

期間要注意一些安全性的檢查

1 #include 2 #include 3 #include 4/*

5*劍指offer pro7

6*倆個鍊錶實現佇列操作7*/

89/*定義順序棧結構定義和操作

*/10

#define len 100

11 typedef struct

12stack,*stackpoint;

16/*

定義棧的一些操作函式

*/17

//棧的初始化

18stackpoint initstack()

1928

//記憶體分配成功則將棧頂指標賦值,初始值為-1

29 stack->top = -1;30

//返回此時的節點指標

31return

stack;32}

33//

棧空判斷函式

34int

isemptystack(stackpoint stack)

3541

//進棧函式

42int push(stackpoint stack,char

c)43

50/*

正常情況進棧操作,注意此時入棧的位置

*/51 stack->data[stack->top+1] = c;//

元素入棧

52 stack->top++;//

棧位置指示遞增

53return1;

54}55//

出棧操作

56int pop(stackpoint stack,char *c)

5764

/*出棧操作

*/65 *c = stack->data[stack->top];

66 stack->top--;

67return1;

68}6970

/*佇列定義及操作

*/71

//定義佇列結構

72 typedef struct

73queue,*queuepoint;

77//

元素入佇列

78int insertqueue(queuepoint queue,char

c)79

86 printf("

%c\n

",c);

87//

將元素壓入佇列,如不成功則返回

88if(!push(queue->stack1,c))

8993

return1;

94}95//

從佇列出元素

96char

outputqueue(queuepoint queue)

97109

110}

111if(queue->stack2->top==-1

)112

116//

從stack2正常彈出

117 pop(queue->stack2,&c);

118return

c;119

}120

//建立乙個佇列

121queuepoint createqueue()

122133

134135

136137

int main(int argc,char *argv)

138145 insertqueue(queue,'x'

);146 insertqueue(queue,'s'

);147 insertqueue(queue,'f'

);148 printf("

queue output %c\n

",outputqueue(queue));

149 insertqueue(queue,'m'

);150 insertqueue(queue,'d'

);151 insertqueue(queue,'x'

);152 printf("

queue output %c\n

",outputqueue(queue));

153 printf("

queue output %c\n

",outputqueue(queue));

154 printf("

queue output %c\n

",outputqueue(queue));

155 printf("

queue output %c\n

",outputqueue(queue));

156 printf("

queue output %c\n

",outputqueue(queue));

157//

printf("結構大小%d",sizeof(stack));

158return0;

159 }

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題7 用兩個棧實現佇列

題目1 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。實現 public class solution07 public intpop return stack2.pop 題目2 用兩個佇列實現乙個棧,實現 public class solution07 01 p...

劍指offer 面試題 兩個佇列實現棧

不像倆個棧實現佇列,兩次先進後出之後就是先進先出,佇列幾次先進先出仍然是先進先出,那麼我們看看實際情況,將佇列裡除最後乙個以外,全都拿走,剩下的這最後乙個就是想要的結果,那麼先前拿走的那些放 呢?給了兩個佇列,那就放在另外乙個佇列裡。若是在出的話,就對另乙個佇列進行相同的操作。templatecla...