十万火急,求助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 展开
堆栈(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 展开
展开全部
//不是很严谨,不过你可以参考.
#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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询