|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 爱学习520 于 2020-7-20 15:32 编辑
为什么输出一直是这样子,如图:最后面一张
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- typedef struct SNode{
- int data;
- struct SNode* next;
- }*Stack;
- //创建一个栈
- Stack CreateStack(){
- Stack s=(Stack)malloc(sizeof(struct SNode));
- s->next=NULL;
- return s;
- }
- //判断栈是否为空
- int IsEmpty(Stack s){
- return (s->next==NULL);
- }
- //进栈
- void Push(Stack s,int data){
- Stack cur=(Stack)malloc(sizeof(struct SNode));
- cur->data=data;
- //栈顶指向当前进栈的结点
- cur->next=s;
- s=cur;
- }
- //出栈
- int Pop(Stack s){
- if(IsEmpty(s)){
- printf("栈为空,无法出栈!\n");
- return NULL;
- }
- //保存当前的栈空间
- Stack p=s;
- //保存当前栈元素
- int data=s->data;
- //栈顶指向出栈后的栈顶空间
- s=s->next;
- //释放出栈的元素空间
- free(p);
-
- return data;
- }
- main(){
- Stack s=CreateStack();
-
-
- Push(s,5);
- Push(s,6);
- Push(s,7);
- Push(s,8);
- Push(s,9);
-
- printf("出栈元素:%d",Pop(s));
- }
复制代码
然后我现在找到问题了,是因为s一直都指向建立栈时的栈底,所以我用了二级指针,把s的地址传递过去,每次进栈出栈后就是当前栈的指向了,可是我觉得二级指针太麻烦了,谁能继续改进一下
修改后的代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- typedef struct SNode{
- int data;
- struct SNode* next;
- }*Stack;
- //创建一个栈
- Stack CreateStack(){
- Stack s=(Stack)malloc(sizeof(struct SNode));
- s->next=NULL;
- return s;
- }
- //判断栈是否为空
- int IsEmpty(Stack s){
- return (s->next==NULL);
- }
- //进栈
- void Push(Stack *s,int data){
- Stack cur=(Stack)malloc(sizeof(struct SNode));
- cur->data=data;
- //栈顶指向当前进栈的结点
- cur->next=*s;
- *s=cur;
- }
- //出栈
- int Pop(Stack* s){
- if(IsEmpty(*s)){
- printf("栈为空,无法出栈!\n");
- return NULL;
- }
- //保存当前的栈空间
- Stack p=*s;
- //保存当前栈元素
- int data=(*s)->data;
- //栈顶指向出栈后的栈顶空间
- *s=(*s)->next;
- //释放出栈的元素空间
- free(p);
-
- return data;
- }
- main(){
-
- Stack s=CreateStack();
-
- Push(&s,5);
- Push(&s,6);
- Push(&s,7);
- Push(&s,8);
- Push(&s,9);
-
- printf("出栈元素:%d \n",Pop(&s));
- printf("出栈元素:%d \n",Pop(&s));
- printf("出栈元素:%d \n",Pop(&s));
- printf("出栈元素:%d \n",Pop(&s));
- }
复制代码
让 Push 函数返回新的栈顶就可以了
- Stack Push(Stack s,int data){
- Stack cur=(Stack)malloc(sizeof(struct SNode));
- cur->data=data;
- //栈顶指向当前进栈的结点
- cur->next=s;
- return cur;
- }
复制代码
|
-
|