1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行入栈、 出栈以及取栈顶元素操作。写个功能写成一个函数。
2.从键盘上输入一串带括号的字符,如果其中的括号是匹配的,则输出 “balance”,如果括号不匹配,则输出“not balance”
四 、思考与提高
1.栈的两种存储结构在判别栈空与栈满时,所依据的条件有何不同?
using namespace std;
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#define Maxsize 20
/*
top=-1时栈为空
top = MaxSize - 1
top - 1 为出栈操作
top + 1为进栈操作
*/
struct Sqstack
{
char data[Maxsize];
int top;
};
// 初始化栈
void Init_Sqstack(Sqstack *& s)
{
s = new Sqstack;
s->top = -1;
}
// 销毁栈
void Free_Sqstack(Sqstack *& s)
{
free(s);
}
// 判断栈是否为空
bool isEmpty(Sqstack *& s)
{
if (s->top == -1)
{
return 0;
}
}
// 进栈操作
bool PushSqstack(Sqstack *&s, char &number)
{
if (s->top == Maxsize - 1) //判断是否栈已经满了
{
return false;
}
else // 如果栈没有满,则top加一,并且将数据压入栈中
{
s->top++;
s->data[s->top] = number;
return true;
}
}
int length(char *& data)
{
int size = 0;
while (data[size] >= 0&& data[size] <= 10000)
{
size++;
}
return size-1;
}
void PushFewSqstack(Sqstack *&s, char *&data)
{
int size;
size = length(data);
for (int i = 0; i <= size; i++)
{
PushSqstack(s, data[i]);
}
}
// 出栈操作
bool PopSqstack(Sqstack *&s, char & number)
{
if (s->top == -1) //判断栈是否为空栈,空栈是无法POP的
{
return false;
}
else
{
s->top--;
number = s->data[s->top];
return true;
}
}
// 取栈顶的元素
bool GetTopSqStack(Sqstack *& s, char & number)
{
if (s->top == -1)
{
return false;
}
else
{
number = s->data[s->top];
return true;
}
}
// 打印整个栈
void PrintSqStack(Sqstack *& s, char *& data)
{
s->top = 0;
for (int i = 0; i < length(data);i++)
{
cout << s->data[s->top];
s->top++;
}
cout << endl;
}
void matchSqStack(Sqstack *&s, char *&data)
{
int left_counts = 0;
int right_counts = 0;
PushFewSqstack(s, data);
PrintSqStack(s, data);
s->top = 0;
for(int i=0;i<length(data);i++)
{
if (s->data[s->top] == '(')
{
left_counts++;
s->top++;
}
else if (s->data[s->top] == ')')
{
right_counts++;
s->top++;
}
s->top++;
}
cout << "111" << endl;
if (left_counts == right_counts)
{
cout << "balance" << endl;
}
else
{
cout << "not balance" << endl;
}
}
int main()
{
Sqstack * s;
char a[100];
char * data = a;
Init_Sqstack(s);
cout << "请输入要进栈的数据" << endl;
cin >> data;
//PushSqstack(s, data);
//PushFewSqstack(s, data);
matchSqStack(s, data);
system("pause");
return 0;
}