問題描述
假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行(如沒有出現刪除時棧空)且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。
輸入
輸入第一行給出兩個正整數n和m,其中n是待測序列的個數,m(≤50)是堆疊的最大容量。隨後n行,每行中給出乙個僅由s和x構成的序列。序列保證不為空,且長度不超過100。
輸出
對每個序列,在一行中輸出yes如果該序列是合法的堆疊操作序列,或no如果不是。
程式設計步驟
1.主函式
int
main()
if((str[j]
=='\0')&&
isempty
(s))
printf
("yes\n");
else
printf
("no\n");
}return0;
}
2.需要的函式
stack createstack
(int maxsize)
;//構造乙個堆疊
bool
isempty
(stack s)
;//判斷堆疊空
bool
isfull
(stack s)
;//判斷堆疊滿
bool
push
(stack s,elementtype x)
;//入棧
bool
pop(stack s)
;//出棧
void
clear
(stack s)
;//清棧
2.1
stack createstack
(int maxsize)
2.2
bool
isempty
(stack s)
bool
isfull
(stack s)
2.3
bool
push
(stack s,elementtype x)
}bool
pop(stack s)
}
2.4
void
clear
(stack s)
總**
#include
#include
#define maxs 101
#define maxn 50
typedef
enum
bool
;typedef
int elementtype;
typedef
int position;
typedef
struct snode *ptrtosnode;
struct snode
;typedef ptrtosnode stack;
stack createstack
(int maxsize)
;//構造乙個堆疊
bool
isempty
(stack s)
;//判斷堆疊空
bool
isfull
(stack s)
;//判斷堆疊滿
bool
push
(stack s,elementtype x)
;//入棧
bool
pop(stack s)
;//出棧
void
clear
(stack s)
;//清棧
intmain()
if((str[j]
=='\0')&&
isempty
(s))
printf
("yes\n");
else
printf
("no\n");
}return0;
}stack createstack
(int maxsize)
bool
isempty
(stack s)
bool
isfull
(stack s)
2.3bool
push
(stack s,elementtype x)
}bool
pop(stack s)
}void
clear
(stack s)
3 9 堆疊操作合法性 20分
假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入格式 輸入第一行給出兩個正整數n和m,其中n是待測序列的個數,m ...
5 5 堆疊操作合法性 20分
5 5 堆疊操作合法性 20分 假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入第一行給出兩個正整數n和m,其中n...
5 5 堆疊操作合法性 20分
5 5 堆疊操作合法性 20分 假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入第一行給出兩個正整數n和m,其中n...