数据结构————栈的操作(C语言实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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(); 
 } 

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nicht_sehen/article/details/82756236