栈的链表实现,以及编译原理中的括号匹配
来源:互联网 发布:软件测试虫师 编辑:程序博客网 时间:2024/06/04 20:01
一:
编译原理常有括号的匹配算法。用数组和链表实现的栈都可以实现。现用链表吧。
代码:
cyq@cyq-desktop:~/桌面/C$ cat LinkStack2.c
#include <iostream>
#include <cstdlib>
#include <assert.h>
using namespace std;
class LinkStackNode {
public:
char data;
LinkStackNode* link;
LinkStackNode(char& value):link(NULL),data(value){}
};
class LinkStack{
LinkStackNode* head;
public:
LinkStack():head(NULL){}
void Push(char& value);
char& GetTop();
char Pop();
boolIsEmpty();
voidMakeEmpty();
};
voidLinkStack::Push(char& value)
{
LinkStackNode* add= new LinkStackNode(value);
add->link= head;
head=add;
}
char&LinkStack::GetTop()
{
return head->data;
}
char LinkStack::Pop()
{
assert(head!=NULL);
LinkStackNode* old = head;
head = head->link;
char data=old->data;
deleteold;
return data;
}
bool LinkStack::IsEmpty()
{
return
head==NULL;
}
void LinkStack::MakeEmpty()
{
while(!this->IsEmpty())
{
this->Pop();
}
}
int main(int argc , char *argv[])
{
cout<<"输入括号序列(以为@结束标志):"<<endl;
LinkStacksmall;
char a;
while(cin.peek()!='@'){
cin>>a;
switch(a)
{
case '(':small.Push(a);break;
case ')':
if(!small.IsEmpty())
{
small.Pop(); break;
}
if(small.IsEmpty())
{
cout<<"匹配失败!"<<endl;
exit(0);
break;
}
}
};
if(small.IsEmpty())
cout<<"匹配成功!"<<endl;
else
cout<<"匹配失败!"<<endl;
return 0;
}
二:编译并运行:
cyq@cyq-desktop:~/桌面/C$ g++ LinkStack2.c -o LinkStack2 && ./LinkStack2
输入括号序列(以为@结束标志):
longxibendi(()) (longxibendi)@
匹配成功!
cyq@cyq-desktop:~/桌面/C$ ./LinkStack2
输入括号序列(以为@结束标志):
(longxibendi@126.com)
匹配失败!
void LinkStack::MakeEmpty()
{
while(!this->IsEmpty())
{
this->Pop();
}
}
声明:本文档可以随意更改,但必须署名原作者
作者:凤凰舞者 qq:578989855
- 栈的链表实现,以及编译原理中的括号匹配
- 栈的顺序实现以及括号匹配判断程序
- 栈的实现-括号匹配
- 链栈实现括号匹配
- 括号匹配(链栈实现)
- 链栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配---栈实现
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配,栈实现
- 栈实现括号匹配
- 栈的实现和括号匹配
- 用栈实现括号匹配的检验
- 用栈实现括号匹配的检验
- php下载文件
- 字符串包含引出来的“勤与懒”故事
- php读取目录下的所有文件
- XP 下 MinGW+gdb+glut的安装
- 一些重要的排序算法
- 栈的链表实现,以及编译原理中的括号匹配
- ASP.Net4.0中新增23项功能
- 图像处理
- JVM Specification
- 一句话2
- .net 实现 URL重写,伪静态
- JavaScript 读写文件
- 5.5 标准I/O库_打开流
- 聊聊.net中的异常处理