十万火急,求助C++编程高手!!!!

请各位大虾帮我编下下面的程序,小弟将不胜感激!!堆栈(Stack)是一种特殊的顺序存储表,只允许在表的一端(栈顶)进行插入和删除操作,另一端(栈底)则不允许插入和删除操作... 请各位大虾帮我编下下面的程序,小弟将不胜感激!!
堆栈(Stack)是一种特殊的顺序存储表,只允许在表的一端(栈顶)进行插入和删除操作,另一端(栈底)则不允许插入和删除操作,堆栈的插入和删除通常称为入栈和出栈。栈顶的当前位置是动态的,用一个指针,即栈顶指针来标示栈顶当前位置。如下图所示:
堆栈可以用数组来表示,假设堆栈可保存的数据类型为ElemType。那么堆栈定义如下:
ElemType stack[MaxSize];
int top; //堆栈指针
堆栈相关的操作如下:
Void InitStack(Stack& S); //初始化堆栈S,即把它置为空;
Void push(ElemType item); //元素item进栈,即插入item到栈顶;
ElemType Pop( ); //弹出栈顶元素并返回其值;
ElemType Peek(); //返回栈顶元素的值,但不移动栈顶指针;
Bool IsEmpty(); //判断堆栈是否为空,是返回true;否则返回false;
Void ClearStack(); //清除堆栈中所有元素,使之成为一个空栈;
解决问题:
(1)根据上述提示实现一个堆栈;
(2)堆栈在计算机语言中的编译过程中用来进行语法检查,编写一个程序,利用堆栈来检查一个C/C++语言程序中的花括号、方括号和圆括号是否配对,若能够完全配对返回1,否则返回0
展开
 我来答
Lazy_sleeping
2009-06-13 · TA获得超过205个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:179万
展开全部
//不是很严谨,不过你可以参考.

#include <iostream>
#include <fstream>
#include <行清string>

using namespace std;

const int MaxSize = 200;

class MyStack
{
private:
char stack[MaxSize];
char* top;
int len;
public:
MyStack();
void InitStack();
void Push(char item);
char Pop( );
char Peek();
bool IsEmpty();
void ClearStack();
};

MyStack::MyStack()
{
InitStack();
}

void MyStack::InitStack()
{
len = 0;
top = stack;
}

void MyStack::Push(char item)
{

if (len < 100)
{
stack[len] = item;
top = &stack[len];
len++;
}
else
{
cout << "The stack is full." <<endl;
}
}

char MyStack::Pop( )
{

if (!IsEmpty())
{
char tmp = *top;
top = &stack[len - 1];
len--;
return tmp;
}
else
{
cout << "The stack is empty." <<endl;
return '\0';
}
}

char MyStack::Peek()
{
if (!IsEmpty())
{
return *top;
}
else
{
cout << "The stack is empty." <<endl;
return '\0';
}
}

bool MyStack::IsEmpty()
{
cout << "the length of stack is " << len << endl;
return len < 0;
}

void MyStack::ClearStack()
{
len = 0;
top = stack;
}

int main()
{
MyStack myStack;
ifstream fin;
string strLine;
bool result = false;

myStack.InitStack();

fin.open("test.txt");
if(fin.fail())
{
cout << "File open error!";
exit(1);
}
int i = 0;
while(getline(fin,strLine)) /慎带念/宽困读取行,检查{}是否配对
{
i = 0;
while( '\0' != strLine[i])
{
if ('{' == strLine[i])
{
myStack.Push('{');
}
else if ('}' == strLine[i] && '{' == myStack.Peek())
{
myStack.Pop();
}
i++;
}
}

result = !(myStack.IsEmpty()); //如果栈为空,刚说明配对.
cout << result << endl;

return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式