链栈在括号匹配中的写法

我看了一下,大部分的使用的是顺序栈,我用链栈来试一试
如果有问题欢迎留言

#include <iostream>
#include <cstdlib>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#include <cstring>
#include<cstdio>
typedef struct linknode{
	char data;
	struct linknode *next;
}stack,*listack;

bool initstack(listack &s){     //初始化一个栈
	s=(stack *)malloc(sizeof(stack));
	s->next = NULL;                       //注意=和== 
	return true;
}
bool push(listack &s,char e){    //栈的压入操作
	stack *top;
	top=(stack *)malloc(sizeof(stack));
	top->data=e;
	top->next=s->next;
	s->next=top;
	return true;
}
bool pop(listack &s,char &e){   //栈的取出操作,这里要用到引用符号
	if(s->next!=NULL){
		stack *p;
		p=s->next;
		e=p->data;
	s->next=p->next;
	free(p);
	return true;
}
	if(s->next == NULL){
		return false;
	}
}
void printstack(listack s){         //打印栈函数,如果不用可删掉
	stack *p;
	p=s->next;
	while(p != NULL){
		cout<<p->data<<"  ";
		p=p->next;
	}
}
bool stackempty(listack s){       //判断当前的栈是否为空
	if(s->next==NULL)
	return true;
	else
	return false;
}
string str;
char topelem;          //从栈中取出来的那个元素,方便后续比较
int tag=1;			   //标记位,如果位1则匹配,反之不匹配
int main(int argc, char** argv) {
	
	listack s;
	initstack(s);
	cin>>str;
	int n=str.length();
	for(int i=0; i<n ;i++){
		if(str[i]=='('||str[i]=='['){    //如果是左括号则压入栈中
			push(s,str[i]);
		}
		
		else{	
		if(stackempty(s))  //如果栈中的左括号已经匹配完了,但仍然有右括号需要左括号来匹配
			{
				tag=0;
				break;
			}
			pop(s,topelem);    //取出最近存储的那个左括号
			if(str[i]==')'&&topelem!='(')   //比较
				tag=0;
			if(str[i]==']'&&topelem!='[')    //比较
				tag=0;
		}
	}
	if(tag==1 && stackempty(s)==1)   //右括号比较完了但是栈里存在还没匹配的左括号
		tag=1;
	if(tag==1 && stackempty(s)==0)
		tag=0;
cout<<tag;
//	cout<<"\n";
//	cout<<s->next->data;
//	printstack(s);  cout<<stackempty(s);
	return 0;
}









*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值