#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
int data;
struct stack *next;
}STACK;
void push(STACK **head,STACK **tail,int n)
{
STACK *x;
if(*head==NULL)
{
(*head)=malloc(sizeof(STACK));
(*head)->data=n;
(*head)->next=NULL;
*tail=*head;
}
else
{
x=malloc(sizeof(STACK));
x->data=n;
x->next=NULL;
(*head)->next=x;
(*head)=(*head)->next;
}
}
void show(STACK *tail)
{
if(tail!=NULL)
{
printf("From tail to head:\n");
while(tail!=NULL)
{
printf("%d\n",tail->data);
tail=tail->next;
}
}
else
{
printf("The stack is empty!\n");
}
}
void pop(STACK **head,STACK *tail)
{
STACK *x;
if(*head!=tail)
{
x=*head;
while(tail->next->next!=NULL)
tail=tail->next;
printf("pop: %d\n",(*head)->data);
*head=tail;
free(x);
}
else
{
printf("pop: %d\n",(*head)->data);
free(*head);
*head=NULL;
}
}
int main()
{
STACK *head = NULL;
STACK *tail = NULL;
push(&head,&tail,4);
pop(&head,tail);
push(&head,&tail,7);
push(&head,&tail,9);
show(tail);
return 0;
}
我编辑了代码,现在它可以工作了。谢谢大家!!!
答案 0 :(得分:2)
最直接的问题是您永远不会在head
中初始化tail
和main()
:
STACK *head = NULL;
STACK *tail = NULL;
还有其他一些问题:
pop()
泄漏记忆。show()
),tail
将无效。NULL
无法打印其中一个元素。答案 1 :(得分:2)
刚出门,head
和tail
未初始化。从一开始就是不可能的。
答案 2 :(得分:0)
我将您的代码更改为
1)将main中的两个poitner初始化为0,以便可以通过push函数
进行分配2)从malloc中删除了转换,因为这是C而且不是必需的。
3)你还应该注意aix所指出的代码缺陷。 (我没有在下面的例子中修复它们)
#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
int data;
struct stack *next;
}STACK;
void push(STACK **head,STACK **tail,int n)
{
STACK *x;
if(*head==NULL)
{
(*head)=malloc(sizeof(STACK));
(*head)->data=n;
(*head)->next=NULL;
*tail=*head;
}
else
{
x=malloc(sizeof(STACK));
x->data=n;
x->next=NULL;
(*head)->next=x;
(*head)=(*head)->next;
}
}
void show(STACK *tail)
{
while(tail->next!=NULL)
{
printf("%d\n",tail->data);
tail=tail->next;
}
}
void pop(STACK **head,STACK *tail)
{
while(tail->next->next!=NULL)
tail=tail->next;
printf("pop: %d\n",(*head)->data);
*head=tail;
}
int main()
{
STACK *head = 0;
STACK* tail = 0;
push(&head,&tail,4);
push(&head,&tail,7);
push(&head,&tail,2);
pop(&head,tail);
show(tail);
return 0;
}