求解栈的出栈入栈
#include<stdio.h>#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW -2
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
typedef struct QNode{
char data;
struct QNode *next;
}QNode,*Queueptr;
typedef struct{
Queueptr front;
Queueptr rear;
}LinkQueue;
void InitStack(SqStack S){//建立栈
S.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack S,char e){//压入栈
if(S.top-S.base >= S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++ =e;
}
void Pop(SqStack S,char e){//弹出栈顶,并得到栈顶值
//if(S.top==S.base) return OVERFLOW;
e=*--S.top;
}
void InitQueue(LinkQueue Q){//建立队列
Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
}
void EnQueue(LinkQueue Q,char e){//输入队尾
Queueptr p;
p=(Queueptr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
void DeQueue(LinkQueue Q,char e){//删除队头,并获得队头值
Queueptr p;
//if(Q.front == Q.rear) return(-1);
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
}
int main(){
SqStack S;
InitStack(S);
LinkQueue Q;
InitQueue(Q);
char secret[101],note,x;
scanf("%s",secret);
int i=0,j;
while(secret[i]!='\0'){
i++;//求出数组的长度
}
for(j=i-1;j>=0;j--){
x=secret[j];
printf("%c ",x);
Push(S,x);
}
printf("%d ",j);
while(S.top!=S.base){
Pop(S,x);
printf("%c ",x);
}
return 0;
}
队暂时还没用到,问题出在栈,for循环只循环了一次,而且好像push和pop有问题,无法入栈,程序运行的时候会停止运行,求大神看看