栈的链式存储结构
1.代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef int data_t;
typedef struct node
{
data_t data;
struct node * next;
}linkstack;
//创建
linkstack * creat_stack()
{
linkstack * stack = malloc(sizeof(linkstack));
if(stack == NULL)
{
printf("申请空间失败\n");
return NULL;
}
stack->next = NULL;
return stack;
}
//判空
int isnull(linkstack * stack)
{
return stack->next == NULL;
}
//压栈
int push_stack(linkstack * stack, data_t data)
{
linkstack * p = malloc(sizeof(linkstack));
if(p == NULL)
{
printf("空间申请失败!\n");
return -1;
}
p->data = data;
p->next = stack->next;
stack->next = p;
return 0;
}
//弹栈
int pop_stack(linkstack * stack, data_t * data)
{
linkstack * p;
if(isnull(stack))
{
printf("栈为空,无法进行弹栈操作!\n");
return -1;
}
*data = stack->next->data;
p = stack->next;
stack->next = p->next;
free(p);
return 0;
}
//打印
int print_stack(linkstack * stack)
{
linkstack * p;
if(isnull(stack))
{
printf("表为空\n");
return -1;
}
p = stack->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
//清空
int clean_stack(linkstack * stack)
{
linkstack * p;
while(stack->next != NULL)
{
p = stack->next;
stack->next = p->next;
free(p);
}
return 0;
}
//销毁
int dis_stack(linkstack * stack)
{
if(stack)
clean_stack(stack);
free(stack);
stack = NULL;
}
int main(int argc, const char *argv[])
{
linkstack * stack = creat_stack();
int i, data;
for(i = 0; i < 10; i++)
push_stack(stack,i*10);
print_stack(stack);
for(i = 0; i < 5; i++)
{
pop_stack(stack,&data);
printf("%d ",data);
}
printf("\n");
print_stack(stack);
clean_stack(stack);
print_stack(stack);
return 0;
}
2.运行结果如下: