我也来一个数据结构的简单练习~
程序代码:
#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]