#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}node;
typedef struct{
node head;
node tail;
int num; //节点个数
}stack;
void stack_init(stack *ps)
{
ps->head.next = &(ps->tail);
ps->tail.next = NULL;
ps->num = 0;
}
void stack_delete(stack *ps)
{
node *first = NULL, *mid = NULL, *last = NULL;
while(ps->head.next != &(ps->tail)){
first = &(ps->head);
mid = first->next;
last = mid->next;
if(mid != &(ps->tail)){
first->next = last;
free(mid);
mid = NULL;
}
}
}
int stack_empty(const stack *ps)
{
return ps->head.next == &(ps->tail);
}
int stack_size(const stack *ps)
{
return ps->num;
}
int stack_push(stack *ps, int val)
{
node *new = NULL;
new = (node *)malloc(sizeof(node));
if(!new)
return 0;
new->data = val;
new->next = ps->head.next;
ps->head.next = new;
return 1;
}
int stack_pop(stack *ps, int *val)
{
node *tmp = NULL;
if(ps->head.next == &(ps->tail))
return 0;
tmp = ps->head.next;
*val = tmp->data;
ps->head.next = tmp->next;
free(tmp);
tmp = NULL;
return 1;
}
int stack_top(const stack *ps, int *val)
{
if(ps->head.next == &(ps->tail))
return 0;
*val = ps->head.next->data;
return 1;
}
int main()
{
int val = 0, ret = 0;
stack sk = {0};
stack_init(&sk);
while(1){
printf("input a number:");
scanf("%d", &val);
if(val < 0)
break;
ret = stack_push(&sk, val);
if(!ret)
break;
}
while(1){
ret = stack_pop(&sk, &val);
if(!ret)
break;
printf("%d ", val);
}
printf("\n");
stack_delete(&sk);
return 0;
}
链栈的实现
最新推荐文章于 2023-11-07 10:17:07 发布