非常不喜欢链表操作, 又因为 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;
}