#include <stdio.h>
#include <stdlib.h>
#define MAX 100//定义栈最大值常量
typedef struct stack
{
char* data;//属性:线性表
int size;//川属性:堆栈的实际大小
int top;/// 属性:栈顶
}Stack;
void initStack(Stack* s);// 初始化
void destroyStack(Stack * s);// 销毁栈
void push(Stack* s, char ch);//成员函数:入栈
char pop(Stack* s);//成员函数:出栈并返回栈顶元素
char getTop(Stack* s);//成员函数:获得栈顶元素(不出栈)
int isEmpty(Stack s);//成员函数:栈是否为空
int isFull(Stack s);//∥成员函数:栈是否满
int setNull(Stack s);// 设置栈为空
int main()
{
Stack s;
initStack(&s);
char ch;
printf("请输入字符串(以#结束):");
while ((ch = getchar()) != '#')
{
if (ch == '<')
{
if (!isEmpty(s))
{
pop(&s);
}
}
else if (ch=='@')
{
s.top = 0;
*s.data = NULL;
s.size = 0;
}
else
{
push(&s, ch);
}
}
printf("处理后的字符串为:");
int i = 0;
char str[100] = { 0 };
while (!isEmpty(s))
{
str[i] = pop(&s);
i++;
}
//正向输出
for (int j=i-1;j>=0;j--)
{
printf("%c", str[j]);
}
destroyStack(&s);
return 0;
}
void initStack(Stack* s)//初始化栈
{
s->size = 10;
s->top = -1;
s->data = (char*)malloc(sizeof(Stack));
}
void destroyStack(Stack* s)//删除栈
{
free(s->data);
}
void push(Stack* s, char ch)
{
if (isFull(*s))
{
s->top += 1;
s->data[s->top] = ch;
}
else
{
return ;
}
}
char pop(Stack* s)
{
if (isEmpty(*s))
{
return;
}
return s->data[s->top--];
}
char getTop(Stack* s)
{
if (isEmpty(*s))
{
return;
}
return s->data[s->top];
}
int isEmpty(Stack s)
{
return s.top == -1; //栈为空返回真,否则返回假
}
int isFull(Stack s)
{
if (s.top+1== MAX)
{
return -1;
}
return 1;
}
int setNull(Stack s)//设置栈为空
{
return s.top = -1;
}
上代码先 感谢老师。教得很好