10-C++實現棧的常見操作
棧分為順序棧和鏈棧,順序棧用陣列實現,因為棧的先進後出特性,一般只考慮順序棧。
程式碼1(自己寫的):
#include <iostream>
#include <stdio.h>
#define ERR -9999999
const int maxn = 1000;
using namespace std;
typedef struct Stack{
int data[maxn];
int top; //top指的是下一個要放入的元素位置
}Stack;
bool Is_empty(Stack &s) //判斷棧是否為空
{
if(s.top == 1) return 0;
else return 1;
}
void top(Stack &s) //獲取棧頂元素
{
int x = 0;
if(!Is_empty(s)) printf("NO element!\n");
else
{
x = s.data[s.top-1];
printf("top = %d",x);
}
}
void pop(Stack &s) //彈出或刪除棧頂元素
{
int x;
if(!Is_empty(s)) printf("EMPTY!\n");
else
{
x = s.data[s.top--];
printf("pop is = %d",x);
}
}
void push(Stack &s,int x) //壓入一個元素為x
{
if(s.top>(maxn-1)) printf("FULL!");
else
{
s.data[s.top++] = x;
}
}
int main()
{
Stack st;
st.top = 1; //當前棧為空
int X; //X為每次讀入的值
int n=5; //n為輸入元素的個數
for(int i=1;i<=n;i++)
{
scanf("%d",&X);
push(st,X);
}
pop(st);
top(st);
return 0;
}
程式碼2(西交wrong):
#include <iostream>
#include <stdio.h>
const int maxn = 1000;
typedef struct Stack{
int st[maxn];
int top;
}Stack;
Stack s;
bool IS_empty(){ //判斷棧是否為空
if(s.top <= 1) return 1;
return 0;
}
bool pop(){ //出棧操作
if(s.top <= 1) return 0;
s.top--;
return 1;
}
bool push(int x){ //入棧操作
if(s.top > (maxn-1)) return 0;
s.st[s.top++] = x;
return 1;
}
int top(){ //獲得棧頂元素
if(s.top <= 1) return 0;
return s.st[s.top-1];
}
int main()
{
int n; //n為操作個數
char op[10]; //判斷輸入操作
int ret; //ret儲存返回值
s.top = 1; //棧初始化為空
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",&op);
if(op[0] == 't')
{
ret = top();
if(ret != 0)
printf("top is %d\n",ret);
else
printf("top isn't exist\n");
}
else if(op[0] == 'p' && op[1] == 'o')
{
ret =pop();
if(ret) printf("success pop\n");
else printf("fail pop\n");
}
else if((op[0] == 'p') && (op[1] == 'u'))
{
int x;
scanf("%d",&x);
ret = push(x);
if(ret) printf("success push\n");
else printf("fail push\n");
}
else
{
ret = IS_empty();
if(ret) printf("YES\n");
else printf("NO\n");
}
}
/*直接用stack實現
stack<int> st2;
st2.push(1);
int x = st2.top(); //注意此時x儲存的是值,pop改變的是指標,所以下面pop後並沒有改變x的值
st2.pop();
cout<<x<<endl;
*/
return 0;
}
(感謝西交wrong學長提供以上題目練習)
相關文章
- 棧的模擬實現及常見演算法演算法
- 棧的實現及基本操作
- java實現棧的簡單操作Java
- 常見的DOM操作
- 常見的 emit 實現 AOP demoMIT
- JS常見的字串操作JS字串
- 常見的查詢操作
- Centos 常見操作CentOS
- mysql常見操作MySql
- 兩個棧實現佇列操作佇列
- C語言實現出入棧操作C語言
- 常見面試演算法題JS實現-設計一個有getMin功能的棧面試演算法JS
- 常見的Golang設計模式實現?Golang設計模式
- nginx實現常見場景Nginx
- 表空間常見的操作
- linux常見的操作(轉)Linux
- Haskell常見排序演算法的實現Haskell排序演算法
- Linux 常見高危操作Linux
- UE常見快捷鍵操作
- Oracle redo log 常見操作Oracle Redo
- adb常見操作命令
- JavaScript實現陣列去重的常見方式JavaScript陣列
- 用go實現常見的資料結構Go資料結構
- 用Flex實現常見的幾種佈局Flex
- 常見資料庫的分頁實現方案資料庫
- 延時訊息常見實現方案
- 常見排序原理及 python 實現排序Python
- Linux 和 macos 常見的埠操作LinuxMac
- 資料結構實驗——二叉樹的常見操作資料結構二叉樹
- 棧出現的異常和設定棧的大小-Xss
- 三、棧的實現
- JavaScript 陣列常見操作(一)JavaScript陣列
- JavaScript 陣列常見操作 (二)JavaScript陣列
- Linux 下 常見操作命令Linux
- selenium定位與常見操作
- Linux常見操作小結Linux
- 華為交換機常見QinQ操作
- Qt QTreeView 常見節點操作QTView