#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义结点,栈顶链栈类型
typedef int DataType;
struct Node
{
DataType data;
struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *top;
typedef struct Node *LinkStack;
//创建空栈
LinkStack SetNullStack()
{
LinkStack top=(LinkStack)malloc(sizeof(struct Node));//申请栈顶空间top指向
if(top!=NULL)
top->next =NULL;
else
printf("alloc failure");
return top;//返回栈顶指针
}
//判断栈空
int IsNullStack(LinkStack top)
{
return(top->next == NULL);
}
//进栈
void Push(LinkStack top,DataType x)//进栈
{
PNode p=(PNode)malloc(sizeof(struct Node));//结点p2用于存放新进栈数据
if(p!=NULL)
{
p->data =x;
p->next =top->next ;//使指针域为NULL
top->next =p;
}
else
printf("alloc failure!\n");
}
//出栈
void Pop(LinkStack top)
{
PNode p;
if(IsNullStack(top))
printf("empty!\n");
else
{
p=top->next ;//孤立然后删除
top->next =p->next ;
free(p);
}
}
//取栈顶元素
int top_seq(LinkStack top)
{
if(IsNullStack(top))
printf("empty!\n");
else
return top->next ->data ;
}
//打印链栈
void printLinkStack(LinkStack top)
{
PNode p;
if (top == NULL)
printf("\n The Linklist is NULL !\n");
p = top->next;
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
//括号匹配算法
int BracketMatch(LinkStack top)
{
int flag=1;
char ch,temp;//ch代表输入字符;temp代表栈顶元素
Push(top,'#');//栈底放#
printf("请输入要判断的表达式,输入#结束:");
scanf("%c",&ch);
while(ch!='#')
{
if(ch=='(')//若输入(则送(进栈
Push(top,ch);
else
{
if(ch==')')//若输入)则判断栈顶元素是否为(,若是则匹配,送(出栈,使里面括号为空好进行下次判断,否则flag=0结束判断
{
temp=top_seq(top);
if(temp=='(')
Pop(top);
else
flag=0;break;
}
}
scanf("%c",&ch);//继续输入
}
if(!flag||top_seq(top)!='#')
{
printf("no\n");
return 0;
}
else
{
printf("yes\n");
return 1;
}
}
//主函数
int main()
{
LinkStack stack1=SetNullStack();
BracketMatch(stack1);
system("pause");
}
数据结构—括号匹配问题(链栈)
最新推荐文章于 2023-12-10 23:00:46 发布