括号匹配顺序栈

#include <iostream>
#include "ac.h"

using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	stack head ;
	
	while(1){
		printf("1.创建栈\n");
		printf("2.弹出栈顶元素\n");
		printf("3.压入元素\n");
		printf("4.遍历输出栈\n");
		printf("5.退出程序\n");
		printf("6.括号匹配\n");
		printf("请输入你的选择: ");
		
		int q ;
		scanf("%d",&q);
		
		switch(q){
			case 1:{
				creatStack(head);
				break;
			}
			
			
			case 2:{
				Element e;
				if(popStack(head,e))
					printf("栈顶元素为:%c\n",e);
				break;
			}
			
			case 3:{
				int cn;
				printf("请输入你要压入栈的元素个数\n");
				scanf("%d",&cn); 
				 getchar();
				for(int i = 0 ; i < cn ; i ++){
					Element s ;
					scanf("%c",&s);
					
					pushStack(head,s);
				}
				break;
			} 
			
			case 4:{
				print(head);
				break;
			}
			
			case 5:{
				printf("退出程序\n");
				return 0;
				break;
			}
			
			case 6:{
				creatStack(head);
				string s;
				getchar();
				printf("请输入一系列括号:");
				bool st = true;
				cin>>s;
				
				for(int i = 0 ; i < s.length() ; i ++){
					if(s[i] == '(' || s[i] == '[' || s[i] == '{') pushStack(head,s[i]);
					
					
					char q;
					if((s[i] == ')' || s[i] == ']' || s[i] == '}') && (!popStack(head,q) || q + 1 != s[i])){
						st = false;
					}
				}	
					
				if(!st) printf("括号不匹配!!\n");	
				else{
					printf("括号匹配成功!!!\n");
				} 
				break;
			}
		}
	}
	return 0;
}
#include<iostream>
#include<malloc.h>
#define Max 100

using namespace std;
typedef char Element;

typedef struct stack
{
	Element *top;
	Element *base;
	int size;
}stack;

void creatStack(stack &head);

int popStack(stack &head , Element &e);

void pushStack(stack &head , Element e);

void print(stack &head);
#include "ac.h"

void creatStack(stack &head)
{
	head.top = (Element *)malloc(sizeof(Element)*Max);
	if(head.top == NULL){
		printf("内存分配失败\n");
		return ;
	}
	
	head.base = head.top;
	head.size = 0;
	
	printf("创建成功!!!\n");
}

int popStack(stack &head , Element &e)
{
	if(head.size == 0 || head.top == head.base){
		printf("栈为空\n");
		return 0;
	}
	e = *(--head.base );
	head.size --;
	return 1;
}

void pushStack(stack &head , Element e)
{
	if((head.size + 1) % Max == 0 && head.size){
		head.base = (Element *)malloc(sizeof(Element)*Max);
	}
	
	*(head.base ++) = e;
	
	head.size ++;
	
	//printf("压栈成功\n");
}

void print(stack &head)
{
	stack q = head;
	if(q.top == q.base){
		printf("栈为空\n");
		return ;
	}
	
	while(q.top != q.base){
		printf("%d ",*(q.top++));
	}
	printf("\n"); 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值