C++ 模拟栈 stacks (数据结构实验)
非常不喜欢链表操作, 又因为 c++ STL 库里 自带 stack 函数, 但是 实验课 需要自己写, 好吧
模仿STL stack 写到一个结构体中, 这让我习惯了stack 函数的人很舒服。
(1)输入一个十进制数,利用栈操作,将该数转换成n进制数。
(2)输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
so easy、
#include <iostream> #include <string.h> #include <queue> #include <stdlib.h> #include <stack> #include <stdio.h> using namespace std; /* 1)输入一个十进制数,利用栈操作,将该数转换成n进制数。 (2)输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。 */ const int n =12; const int nn=12; typedef struct Stack{ char *x; int top; int size; void InitStack() { x= (char *)malloc(n*sizeof(char)); top=0; size=n; } bool emptys() { if(top==0) return true; return false; } void Push_back(char num) { if(top>=size) { x= (char *) realloc(x,size+nn*sizeof(char)); if(!x) return; size+=nn; } x[top++]=num; } void Pop(char &num) { if(top==0)return; num=x[--top]; } char Gettop() { if(top==0) return -1; return x[top-1];// top 下一个 } }stacks; int main() { stacks S; S.InitStack(); int num,z; char y=0; cin>>num>>z; while(num) { char xy; xy =(char) (num%z +'0'); S.Push_back(xy); num/=z; } while(!S.emptys()) { if(S.Gettop()<='9'&&S.Gettop()>='0') printf("%c",S.Gettop()); else printf("%c",S.Gettop()-'0'+'A'-10); S.Pop(y); } cout<<endl; stacks ST; ST.InitStack(); string str; cin>>str; int len=str.length(); for(int i=0;i<=len;i++) { if(str[i]=='('||str[i]=='['||str[i]=='{') ST.Push_back(str[i]); else if(str[i]==')'||str[i]==']'||str[i]=='}') ST.Pop(y); } printf(ST.emptys()?"YES\n":"NO\n"); return 0; }
岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!
岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!
岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!