以P和O(大寫字母O)表示入棧和出棧操作,根據一個P和O的序列,對一個空堆疊進行操作,當進行操作結束後,堆疊為空,則該序列是合法的,否則為非法的
內容:
假設以P和O(大寫字母O)表示入棧和出棧操作,根據一個P和O的序列,對一個空堆疊進行操作,當進行操作結束後,堆疊為空,則該序列是合法的,否則為非法的(包括棧滿操作沒完成,棧空操作沒完成,操作完成但堆疊為空)。當判斷為P時,輸入入棧元素併入棧,當判斷為O時輸出棧頂元素並出棧。入棧元素型別設為int型。
程式碼:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define MAXSIZE 10
typedef struct
{
int num[MAXSIZE];//儲存數字
int top; //指向num棧頂
} SqStack, *Sq;
void Display(Sq S) // 顯示函式,輸出棧中元素
{
if(S->top== -1)
{
printf("棧為空");
}
else
{
printf("棧中元素是:");
while(S->top != -1)
{
printf("%d ",S->num[S->top]);
S->top--;
}
}
}
int Push(Sq S )//數字入棧
{ int flag=1;
if(S->top == MAXSIZE-1) // 棧滿
{
flag = 0;
}
else
{
S->top++;
printf("輸入入棧數字:");
scanf("%d",&S->num[S->top]);
flag = 1;
}
return flag;
}
int Pop(Sq S)//數字出棧
{
int flag = 1;
if(S->top == -1)
{
flag = 0;
}
else
{
printf("輸出出棧元素:%d",S->num[S->top]);
printf("\n");
S->top--;
flag = 1;
}
return flag;
}
int main()
{
Sq S=(SqStack *)malloc(sizeof(SqStack));
S->top = -1; //初始化棧
int flag = 1; //標誌變數
int l; // 儲存Po序列長度
char PO[MAXSIZE]; //Po序列陣列
printf("輸入PO序列:");
gets(PO);
l=strlen(PO); //計算PO序列長度
for(int j=0; j<l; j++) //根據PO序列 ,P為數字入棧,O為數字出棧
{
if(PO[j]=='P')
flag = Push(S);
else if(PO[j]=='O')
flag = Pop(S);
else if(flag == 0) // if(flag == 0)跳出迴圈
break;
}
if(flag==1 && S->top==-1) //各步執行合法 即Push(S), Pop(S),執行完畢後棧為空!
printf("合法!");
else //若PO序列 執行後不合法,輸出棧中剩餘元素
{
printf("非法!\n");
Display(S);
}
return 0;
}
相關文章
- 根據openGauss/MogDB的lwtid檢視執行緒堆疊執行緒
- Hadoop的I/O操作Hadoop
- 聊一聊JavaScript中的執行上下文和堆疊JavaScript
- 『無為則無心』Python序列 — 19、Python列表的其他操作(切片和遍歷)Python
- 使用 iotop 監控哪些程式在進行I/O操作
- JavaScript是如何工作的:引擎,執行時和呼叫堆疊的概述!JavaScript
- JavaScript中的執行上下文和堆疊是什麼JavaScript
- 堆和棧的概念和區別
- JavaScript中記憶體使用規則--堆和棧JavaScript記憶體
- 記憶體中發堆和棧,棧是執行時的單位,而堆是儲存的單位記憶體
- JavaScript的工作原理:引擎,執行時和呼叫堆疊JavaScript
- Redis -對大資料量的 key 進行批量操作的一個記錄Redis大資料
- 大根堆和小根堆的介紹
- 堆和棧的解釋和區別
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 瞭解Javascript中的執行上下文和執行堆疊JavaScript
- JavaScript理解堆和棧JavaScript
- 『無為則無心』Python序列 — 17、Python字串操作的常用APIPython字串API
- jquery獲得option的值和對option進行操作jQuery
- 【譯】JavaScript的工作原理:引擎,執行時和呼叫堆疊的概述JavaScript
- 02. I/O 操作
- 堆的原理以及實現O(lgn)
- 解讀 JavaScript 之引擎、執行時和堆疊呼叫JavaScript
- 堆和棧在物理上的區別
- C++中堆和棧的完全解析C++
- python堆和棧的區別有哪些Python
- 刷題系列 - 給出一個帕斯卡三角的行數,返回該行元素,要求複雜度為K(O)複雜度
- Linux UIO機制--使用者空間I / O操作方法LinuxUI
- 『無為則無心』Python序列 — 21、Python字典及其常用操作Python
- 『無為則無心』Python序列 — 22、Python集合及其常用操作Python
- 流?I/O 操作?阻塞?epoll?
- I/O流以及檔案的基本操作
- JS 資料型別和堆疊JS資料型別
- CSS之定位和堆疊屬性CSS
- 堆疊和記憶體的關係 細說記憶體
- 如何正確理解棧和堆?
- Java中棧和堆講解Java