以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;
}
相關文章
- 第六講 堆疊操作
- grep命令的-o和-P選項
- 聊一聊JavaScript中的執行上下文和堆疊JavaScript
- 僅用遞迴函式和棧操作逆序一個棧遞迴函式
- 重疊IO操作在進行中
- C#中堆和堆疊的區別C#
- JAVA的堆和棧(轉)Java
- 堆和棧的區別
- 使用 iotop 監控哪些程式在進行I/O操作
- JavaScript中的執行上下文和堆疊是什麼JavaScript
- JavaScript是如何工作的:引擎,執行時和呼叫堆疊的概述!JavaScript
- 記憶體中發堆和棧,棧是執行時的單位,而堆是儲存的單位記憶體
- 如何僅用遞迴函式和棧操作逆序一個棧遞迴函式
- 堆和棧的概念和區別
- JavaScript中記憶體使用規則--堆和棧JavaScript記憶體
- JavaScript的工作原理:引擎,執行時和呼叫堆疊JavaScript
- 安裝應用程式 報“ 997 重疊 I/O 操作在進行中”錯解決辦法
- 根據openGauss/MogDB的lwtid檢視執行緒堆疊執行緒
- z-index堆疊規則Index
- 登入一個簡單的網頁進行的操作網頁
- java堆和棧的區別Java
- Redis -對大資料量的 key 進行批量操作的一個記錄Redis大資料
- Hadoop的I/O操作Hadoop
- 堆和棧的解釋和區別
- 『無為則無心』Python序列 — 19、Python列表的其他操作(切片和遍歷)Python
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- JavaScript理解堆和棧JavaScript
- 瞭解Javascript中的執行上下文和執行堆疊JavaScript
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- 關於ORACLE I/O操作的幾個檢視Oracle
- Java中堆和棧的區別Java
- 基礎——堆和棧的區別
- 堆(heap)和棧(stack)的區別
- VI操作--跳到最後一行和跳到最後一行的最後一個字元字元
- 【譯】JavaScript的工作原理:引擎,執行時和呼叫堆疊的概述JavaScript
- jquery獲得option的值和對option進行操作jQuery
- 使用正則不允許對整表進行操作