日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构——栈与队列操作(用栈模拟队列)

發布時間:2025/7/25 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构——栈与队列操作(用栈模拟队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【棧與隊列操作】
問題描述:假設有兩個長度相同的棧 S1,S2,已知以下入棧、出棧、判棧滿和判棧空操作:
void Push(S,x);
Elemtype Pop(S);
bool StackFull(S);
bool StackEmpty(S);
現用這兩個棧構成一個隊列,實現入隊列、出隊列操作的算法:
bool EnQueue(x);
Elemtype DeQueue(S);

要求:
(1)設??臻g大小MaxSize=10,隊列的數據通過調用算法initRandomize(int *arr, int n, int min, int max)隨機產生。
(2)測試環節要包含出隊列"空"和入隊列"滿"的情況出現。

知識點:
1.靜態棧的基本算法(因為簡單,自定義函數短小,總覺得遺漏了些什么)
2.用棧來模擬隊列(這里就沒定義隊列了,棧S1就當作時隊列了,出隊列的時候借用棧S2來倒序輸出)
3.關于initRandomize(int *arr, int n, int min, int max)的使用
4.還有就是Sleep()、memset()的使用

自己基于【數據結構】【嚴蔚敏】版敲的
(網上應該會有許多更優的思路)
直接來完整代碼:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 #define MAXSIZE 10 //棧的大小和隊列的大小都是 10 typedef int Elemtype; typedef struct Stack {int data[MAXSIZE]; int top; // 棧頂指針 } SqStack;#include <time.h> //time(0)需要的頭文件 (代表當前時間自標準時間戳(1970年1月1日0點0分0秒,GMT)經過了多少秒) void initRandomize(int *arr, int n, int min, int max) {int i = 0;srand(time(0)); /*設置種子,并生成偽隨機序列*/for (i = 0; i < n; ++i) {arr[i] = rand()% (max - min + 1) + min; /*得到從[min, max]之間的隨機數*/printf("%d ", arr[i]);}printf("\n");}int InitStack(SqStack &S) //初始化靜態棧 {S.top=0; }int Push(SqStack &S,int e) {if(S.top>=MAXSIZE) return ERROR;S.data[S.top++]=e;return OK; }int Pop(SqStack &S,int &e) {if(S.top == 0) return ERROR;e=S.data[--S.top];//e=*(S.data+S.top-1)return OK; }int Empty(SqStack &S) {if(S.top == 0) return 1;else return 0;} int Full(SqStack S) {if(S.top == MAXSIZE) return 1;else return 0; }SqStack S1; SqStack S2; int EnQueue(int x)//進入隊列 {if(Full(S1)){printf("隊列已滿\n");}elsePush(S1,x);} Elemtype DeQueue()//出隊列 {if(Empty(S1)){printf("隊列為空\n");}InitStack(S2);int e;while(!Empty(S1)){Pop(S1,e);Push(S2,e); }while(!Empty(S2)){Pop(S2,e);printf("%d ",e);}printf("\n\n\n");}int EmptyStack(SqStack &S) //判斷棧是否為空 {if(Empty(S1)) return 1;else 0; }void test1() {int a[10],i; initRandomize(&a[0], 10, 1, 1002);//生成15個隨機數 InitStack(S1); for(i=0;i<10;i++) //溢出與不溢出關鍵看這里讀入了幾個數,棧的大小等于隊列的大小 {EnQueue(a[i]);}printf("輸出隊列為:\n"); DeQueue();//memset(a,0,sizeof(int)*10); }void test2() {int a[10]={1,2,3},i; initRandomize(&a[3], 10, 1, 1002); InitStack(S1); for(i=0;i<11;i++) //溢出與不溢出關鍵看這里讀入了幾個數,棧的大小=隊列的大小=MAXSIZE=10 {EnQueue(a[i]);}if(i<=10){printf("輸出隊列為:\n"); DeQueue();}//memset(a,0,sizeof(int)*10);//printf("%d %d",a[0],*(a+3)); }void test3() {int a[10],i; initRandomize(&a[0], 10, 1, 1002); InitStack(S1); for(i=0;i<0;i++) //溢出與不溢出關鍵看這里讀入了幾個數,棧的大小等于隊列的大小 {EnQueue(a[i]); }if(!Empty(S1)){printf("輸出隊列為:\n"); DeQueue();}elseprintf("隊列為空"); }int main() {test1(); //正常情況 Sleep(1000);//暫停1秒,變化種子點 test2(); // 溢出 test3(); // 為空 }

轉載于:https://www.cnblogs.com/vivid-victory/p/10090473.html

總結

以上是生活随笔為你收集整理的数据结构——栈与队列操作(用栈模拟队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。