链式栈的实现(头文件及源程序)
Linkedstack.h
#ifndef __LINKEDSTACK_H__
#define __LINKEDSTACK_H__
typedef int ElemType_stack;
typedef struct Node_stack
{ ElemType_stack data; struct Node_stack * next; struct Node_stack * front; } Node_stack;
typedef struct Linkedstack
{ int num; Node_stack * top; Node_stack * bottom;
} Linkedstack;
Linkedstack * Init_stack ( ) ;
Node_stack * Create_New_Node_stack ( ElemType_stack value) ;
void push_stack ( Linkedstack * linkedstack, ElemType_stack value) ;
void pop_stack ( Linkedstack * linkedstack) ;
void destroy_stack ( Linkedstack * linkedstack) ;
ElemType_stack get_stack_top ( Linkedstack * linkedstack) ;
int empty_stack ( Linkedstack * linkedstack) ;
int length_stack ( Linkedstack * linkedstack) ; #endif
Linkedstack.c
#include <stdio.h>
#include <stdlib.h>
#include "linkedstack.h"//栈初始化
Linkedstack *Init_stack( )
{Linkedstack *linkedstack = malloc(sizeof(Linkedstack));linkedstack->num = 0;linkedstack->top = NULL;linkedstack->bottom = NULL;return linkedstack;
}//创建一个新结点
Node_stack *Create_New_Node_stack(ElemType_stack value)
{Node_stack *new_node = malloc(sizeof(Node_stack));new_node->data = value;new_node->next = NULL;new_node->front = NULL;return new_node;
}//入栈
void push_stack(Linkedstack *linkedstack, ElemType_stack value)
{if (linkedstack == NULL){printf("栈不存在!\n");return;}Node_stack *new_node = Create_New_Node_stack(value);if (linkedstack->num == 0){linkedstack->top = new_node;linkedstack->bottom = new_node;new_node->front = linkedstack->top;}else{linkedstack->top->next = new_node;new_node->front = linkedstack->top;linkedstack->top = new_node;}linkedstack->num++;
}//出栈
void pop_stack(Linkedstack *linkedstack)
{if (linkedstack == NULL){printf("栈不存在!\n");return;}if (linkedstack->num == 1){linkedstack->top->front = NULL;free(linkedstack->top);linkedstack->top = NULL;linkedstack->bottom = NULL;}else{linkedstack->top = linkedstack->top->front;free(linkedstack->top->next);linkedstack->top->next = NULL;}linkedstack->num--;}//销毁一个栈
void destroy_stack(Linkedstack *linkedstack)
{if (linkedstack == NULL){printf("栈不存在!\n");return;}else{while (linkedstack->num != 0){pop_stack(linkedstack);}//free(linkedstack);linkedstack = NULL;}
}//读取栈顶元素
ElemType_stack get_stack_top(Linkedstack *linkedstack)
{if (linkedstack == NULL){printf("栈不存在!\n");return 0;}if (linkedstack->num == 0){printf("栈已空,获取栈顶元素失败!");return 000;}else{return linkedstack->top->data;}
}//判断栈空
int empty_stack(Linkedstack *linkedstack)
{if (linkedstack == NULL){printf("栈不存在!\n");return -1;}if (linkedstack->num == 0){return 1; //栈空}else{return 0; //栈非空}
}//获取栈的元素个数
int length_stack(Linkedstack *linkedstack)
{if (linkedstack == NULL){printf("链表不存在!\n");return 0;}return linkedstack->num;
}