我也来一个数据结构的简单练习~
程序代码:
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define WORD_MAX 20
#define LENGTH_MAX 100
#define LEN_Stack sizeof(Stack)
#define LEN_LinkStack sizeof (LinkStack)
typedef struct Stack
{
char s[WORD_MAX];
struct Stack* next;
}Stack,*PStack;
typedef struct LinkStack
{
PStack base;
PStack top;
}LinkStack,*PLinkStack;
PLinkStack Creat_Stack(); //创建一个栈
void Push_Stack(PLinkStack stack,char a[]); //入栈
void Pop_Stack(PLinkStack stack); //出栈
int Empty_Stack(PLinkStack stack); //判断栈空
void Destory_Stack(PLinkStack stack); //销毁栈
int main()
{
PLinkStack stack=Creat_Stack();
char a[LENGTH_MAX*WORD_MAX]={0};
char *p=NULL;
char *buf=a;
printf("请输入句子:");
scanf("%[^\n]%*c",a);
while ((p=strtok(buf," "))!=NULL)
{
Push_Stack(stack,p);
buf=NULL;
}
if (!Empty_Stack(stack))
{
printf("%s",stack->top->s);
Pop_Stack(stack);
}
while (!Empty_Stack(stack))
{
printf(" %s",stack->top->s);
Pop_Stack(stack);
}
puts("");
Destory_Stack(stack);
free(stack);
stack=NULL;
return 0;
}
PLinkStack Creat_Stack() //创建一个栈
{
PLinkStack stack=(PLinkStack)malloc(LEN_LinkStack);
if (stack==NULL)
{
puts("创建出错!");
exit(0);
}
stack->top=stack->base=(PStack)malloc(LEN_Stack);
if (stack->base==NULL)
{
puts("创建出错");
exit(0);
}
memset(stack->top,0,LEN_LinkStack);
return stack;
}
void Push_Stack(PLinkStack stack,char a[]) //入栈
{
PStack p=(PStack)malloc(LEN_Stack);
if (p==NULL)
{
puts("创建出错");
exit(0);
}
p->next=stack->top;
strcpy(p->s,a);
stack->top=p;
}
void Pop_Stack(PLinkStack stack)
{
if (Empty_Stack(stack))
return ;
stack->top=stack->top->next;
}
int Empty_Stack(PLinkStack stack) //判断栈空
{
return stack->base==stack->top;
}
void Destory_Stack(PLinkStack stack) //销毁栈
{
PStack p=NULL;
while (!Empty_Stack(stack))
{
p=stack->top->next;
free(stack->top);
stack->top=p;
}
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]








