栈是限定仅在表头进行插入和删除操作的线性表。
希望这段代码可以帮助
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
struct stack
{
struct node *top;
struct node *end;
};
//压栈
void push(struct stack *STACK,int num)
{
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp->data=num;
struct node *p=STACK->top;//p=head
temp->next=p->next;
p->next=temp;
STACK->top=p;
}
//出栈
void pop(struct stack *STACK)
{
struct node *p=STACK->top;
if(p->next==STACK->end)
{
printf("the stack is empty\n");
return;
}
struct node *q=p->next;
p->next=q->next;
free(q);
q=NULL;
STACK->top=p;
}
void free_stack(struct stack * STACK)
{
struct node * q;
//判断栈首是不是等于栈尾,或者栈中是否有节点
while(STACK->top->next != NULL)
{
q=STACK->top->next;//q=head->next;
STACK->top->next=q->next;//head->next=q->next
free(q);
q=NULL;
}
free(STACK->top);//free(head);
STACK->top=NULL;//防止top出现野指针
//STACK->end=NULL;
return ;
}
//打印栈
void show(struct stack *STACK)
{
if(STACK->top==NULL)
{
printf("the stack is not exist\n");
return ;
}
struct node *p=STACK->top;//p=head
while(p->next!=NULL)
{
printf("%d\n",p->next->data);
p=p->next;
}
}
int main()
{
struct stack *STACK=(struct stack*)malloc(sizeof(struct stack));
struct node *head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
STACK->top=head;
STACK->end=NULL;
push(STACK,2);
push(STACK,3);
push(STACK,4);
printf("压栈之后\n");
show(STACK);
/*printf("出栈\n");
pop(STACK);
show(STACK);
printf("出栈\n");
pop(STACK);
show(STACK);
printf("出栈\n");
pop(STACK);
show(STACK);
printf("出栈\n");
pop(STACK);*/
printf("清空栈\n");
free_stack(STACK);
show(STACK);
return 0;
}