近期学习数据结构栈相关的知识时,用代码实现遇到最多的问题就是入栈操作时候报标题所述错误,由于代码水平太次,找了很多网上的解决方案未能解决,请求各位大佬帮助。代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<malloc.h>
#define MAXSIZE 20
typedef struct {
char* base;
char* top;
int stacksize;
}Sqstack;
void Initstack(Sqstack& S) {
S.base = new char[MAXSIZE];
if (!S.base) {
printf("分配失败");
}
S.base = S.top;
S.stacksize = MAXSIZE;
}
void Push(Sqstack& S, char e) {
if (S.top - S.base == S.stacksize) {
printf("栈满");
return;
}
*S.top = e;
S.top++;
}
void Pop(Sqstack& S) {
if (S.base = S.top) {
return;
}
--S.top;
char e = *S.top;
}
int StackEmpty(Sqstack& S) {
if (S.base == S.top) {
return 0;//栈空
}
else
return 1;
}
char getTop(Sqstack& S) {
//取栈顶元素;
if (S.base != S.top) {
return *(S.top - 1);
}
}
void Bracket_match(Sqstack& S,char arr[]) {
Initstack(S);
int flag = 1;
int i = 0;
//char ch = arr[i];
for (int i = 0;i < MAXSIZE;i++) {
char ch = arr[i];
while (ch != '#' && flag == 1) {
switch (ch) {
case '(':
Push(S, ch);
break;
case '[':
Push(S, ch);
break;
case ')':
if (!StackEmpty(S) && getTop(S) == '(') {
Pop(S);
}
else {
flag = 0;
}
break;
case ']':
if (!StackEmpty(S) && getTop(S) == '[') {
Pop(S);
}
else {
flag = 0;
}
break;
}
}
//i++;
//if (i < MAXSIZE) {
// ch = arr[i];
//}
}
if (!StackEmpty(S) && flag == 1) {
printf("匹配成功!");
}
else {
printf("匹配失败!");
}
}
int main() {
Sqstack S;
Initstack(S);
char c[10] = {'(','[',']','(','[',']',')',')','#'};
Bracket_match(S,c);
free(S.base);
system("pause");
return 0;
}