33,008
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
typedef int ElemType;
/*typedef struct Stake
{ PNODE Ptop;
PNODE Pbottom;
}STAKE*/
typedef struct Linknode
{
ElemType data;
struct Linknode *next;
}LinkStNode;
LinkStNode *top=NULL;
void InitStack(LinkStNode*&s)
{
s=(LinkStNode*)malloc(sizeof(LinkStNode*));
s->next=NULL;
}
bool IsEmpty(LinkStNode*s)
{
return(s->next==NULL);
}
void Push(LinkStNode *&s, ElemType e)
{
LinkStNode *p = NULL;
p=(struct Linknode*)malloc(sizeof(LinkStNode));
p->data=e;
p->next=s->next;
s->next=p;
}
bool Pop(LinkStNode*&s,ElemType&e)
{
LinkStNode*p;
if(s->next==NULL)//如果s->next==NULL,则说明栈空,没有元素进栈,无法出栈
printf("栈空,无法出栈!\n");
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}
int main()
{
LinkStNode*s;
InitStack(s);
char str[100];
printf("请输入一个字符串:");
gets(str);
printf("输入的字符串为:");
puts(str);
int i=0;
while(i < strlen(str))
{
Push(s, str[i]);
i++;
}
LinkStNode *p=top;
while(p!=NULL)
{
printf("%c\t",p->data);
p=p->next;
}
int e;
while(!IsEmpty(s))//s->next!=NULL 只要栈底不为空,就不停的出栈
{
//IsEmpty()括号里面要有参数,否则出现error
Pop(s, e);
printf("%c\t",e);
}
}