版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nicht_sehen/article/details/82756236
//栈stack
#include"stdio.h"
#define maxsize 50
typedef struct {
int a[maxsize];
int top;
}stack;
typedef struct {
char a[maxsize];
int top;
}stack_char;
//初始化
void init(stack *s)
{
s->top=0;
}
//判空
int is_empty(stack *s)
{
if(s->top==0)
{printf("此栈为空\n");return 1;}
else
{printf("此栈不为空\n");return 0;}
}
int is_empty_c(stack_char *s)
{
if(s->top==0)
{return 1;}
else
{return 0;}
}
//读栈顶的值
void read_top(stack *s)
{
printf("%d",s->a[s->top-1]);
}
//取任意位置的值
void read(stack *s,int pos)
{
printf("%d",s->a[pos-1]);
}
//插入(开出一个栈存储pos上面的元素)
void insert(stack *s1,int pos,int elem)
{
stack *s2;
int i,j,k;
for(i=0;i<s1->top-pos+1;i++)
s2->a[i]=s1->a[pos+i-1];
s1->a[pos-1]=elem;
s1->top++;
j=pos;
for(k=0;k<s1->top-j;k++)
{
s1->a[pos]=s2->a[k];
pos++;
}
}
//压栈(从栈顶压入元素)
void push(stack *s,int elem)
{
s->a[s->top]=elem;
s->top++;
}
//删除
void pop(stack *s)
{
s->top--;
}
void pop_c(stack_char *s)
{
s->top--;
}
//遍历
void print(stack *s)
{
int n;
n=s->top;
while(n!=0)
{
printf("%d ",s->a[n-1]);
n--;
}
printf("\n");
}
//判断括号匹配
int match(char c[])
{
stack_char s;
int i;
while(c[i]!='#')
{
switch(c[i])
{
case '{':
case '[':
case '(':s.a[s.top]=c[i];s.top++;break;
case '}':if(s.top!=0&&s.a[s.top-1]=='{'){pop_c(&s);break;}
case ']':if(s.top!=0&&s.a[s.top-1]=='['){pop_c(&s);break;}
case ')':if(s.top!=0&&s.a[s.top-1]=='('){pop_c(&s);break;}
else return 0;
}
i++;
}
return (is_empty_c(&s));
}
//进制转换(十进制转二进制)
void trans()
{
int n,m;
printf("输入要转换的十进制数:");
scanf("%d",&n);
stack s;
init(&s);
while(n!=0)
{
m=n%2;
push(&s,m);
n=n/2;
}
print(&s);
}
//主函数
int main()
{
char c[50];
stack s;
init(&s);
push(&s,1);
push(&s,3);
push(&s,8);
print(&s);
insert(&s,1,7);
print(&s);
pop(&s);
print(&s);
is_empty(&s);
read_top(&s);
printf("\n");
read(&s,2);
printf("\n");
int m;
stack_char sc;
printf("请输入字符:");
scanf("%s",c);
m=match(c);
if(m==1)
printf("匹配\n");
else
printf("不匹配\n");
trans();
}
运行结果: