大数据结构 括号匹配实验报告材料

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

括号的匹配

1.需求和规格说明

(1)实现括号的是否匹配的判定。

(2)实现匹配错误的提示。

(3)实现栈内容的动态显示。

2.设计

2.1.设计思想

(1)对于括号匹配的判定,首先输入字符串到缓冲区。逐个字符读取字串,遇到的是左括号则入栈,若是右括号,则出栈。出栈的左括号如果和右括号匹配,则一对括号匹配成功;否则,这对括号匹配失败,并给出错误提示。

(2)分析括号匹配错误出现的情况,主要有三种:左括号数大于右括号数,左括号与右括号不匹配,右括号数大于左括号数。根据栈的存储情况就能判定出这三种情况,并且实时的将信息放映到可视化控件上。

(3)对于匹配过程和栈内容的动态显示,可以用listbox控件实时的显示和更新。窗口上有两个listbox控件,第一个动态显示push和pop动作以及提示错误信息;第二个listbox则动态模拟栈内的存储情况。

2.2.设计表示

(1)存储结构

Node节点

template

class Node

{

public:

element ele;

Node *pre; //前驱指针

Node *next; //后继指针

Node()

{

pre=NULL;

next=NULL;

}

Node(element e)

{

ele=e;

pre=NULL;

next=NULL;

}

Node * MakeNode(element e)//传入参数返回一个节点指针,实现参数的封装。

{

Node *temp=new Node(e);

return temp;

}

};

MyListStack链栈

template

class MyListStack

{

public:

Node *base;

Node *top;

int index;

MyListStack() //初始化链表

{

base=new Node();

top=base;

index=0;

}

void push(element n) //push

{

Node *temp=new Node(n);

top->next=temp;

temp->pre=top;

top=temp;

index++;

}

void pop(element & out) //pop

{

out=top->ele;

top=top->pre;

delete top->next;

top->next=NULL;

index--;

}

BOOL isEmpty(); //返回栈是否为空

{

if(index)

return FALSE;

else

return TRUE;

}

virtual ~MyListStack() //析构链栈,释放空间。

{

Node *p=base;

Node *q=p->next;

while(p->next!=NULL)

{

delete p;

p=q;

q=p->next;

}

delete p;

}

};

(2)涉及的操作

void CKuohaopipeiDlg::OnButtonClear() //清空窗口控件。

void CKuohaopipeiDlg::OnButtonSlowShow( //慢速显示运行过程。

void CKuohaopipeiDlg::OnOK() //进行括号匹配过程。

void CKuohaopipeiDlg::OnSelchangeListInfo() //此函数响应列表框中光标改变的消息,定位错误的位置。

2.3.实现注释

(此部分见源代码中注释)

2.4.详细设计表示

(1)流程示意图

图表 1 匹配流程示意图(2)功能示意图

图表 2 功能示意图

3.用户手册

(1)在编辑框中输入表达式串。

(2)点击开始匹配测试则进行快速匹配。

(3)点击慢速运行。

(4)点击错误信息,定位错误字符。

4.调试报告

输入:{{{[1+1]+(A+d)}}} 结果:正确

输入:{{{{}}}})) 结果:错误

输入:}()){}} 结果:错误

输入:([][])) 结果:错误

5.源代码及运行结果截图

(1)源代码

void CKuohaopipeiDlg::OnOK()

{

// TODO: Add extra validation here

UpdateData(TRUE);

//MyListStack ls;

m_list_info.ResetContent(); //清空list

m_list_stack.ResetContent(); //清空list

BOOL isNum=0;

BOOL isError=0;

int inputlength=m_cstring_input.GetLength();

if (inputlength==0)

{

MessageBox("输入值不能为空!","提示"); //如果字符串为空}

else

{

for(int j=0;j

{

char str_in=m_cstring_input.GetAt(j);

if (str_in=='('||str_in=='['||str_in=='{')

{

isNum=1;

ls.push(str_in); //若为左括号则入栈

CString temp;

temp.Format("push %c into stack \r\n",str_in);

相关文档
最新文档