数据结构——链栈的实现(C语言)
2014-02-18 20:53
465 查看
大家都知道栈的顺序存储的效率低,对删除和插入不方便操作。栈的链式实现操作方便,只需改变链栈的指针域指针的方向,不需要移动数据项。链栈只能在栈顶操作,也就是说只能在栈顶入栈和出栈。
以下是源程序:
函数声明:
程序测试:
以下是源程序:
函数声明:
#ifndef Stack_H #define Stack_H typedef int Item; typedef struct node * PNode; typedef struct node { Item data; PNode next; }Node; typedef struct stack *PStack; typedef struct stack { Item size; PNode top; }Stack; /***创建空栈,并返回栈顶***/ PStack Creat_Stack(); /***判断是否为空栈***/ int Is_Empty(PStack); /***数据项入栈***/ PStack Push_Stack(PStack,Item); /***计算栈的大小***/ int Size_Stack(PStack); /***返回栈顶数据项***/ Item Get_Item_Stack(PStack); /***数据项出栈***/ Item Pop_Stack(PStack); /***清空链栈***/ void Clear_Stack(PStack); /***遍历栈,并自栈顶输出数据项***/ void Traverse_Stack(PStack); #endif函数定义:
#include<stdio.h> #include<stdlib.h> #include"Stack.h" /***创建空栈,并返回栈顶***/ PStack Creat_Stack() { PStack P=(PStack)malloc(sizeof(Stack)); if(NULL!=P) { P->top=NULL; P->size=0; } return P; } /***判断是否为空栈***/ int Is_Empty(PStack P) { if(0==P->size && NULL==P->top) return 1; else return 0; } /***数据项入栈***/ PStack Push_Stack(PStack P,Item val) { PNode PNew=(PNode)malloc(sizeof(Node)); if(NULL==PNew) { printf("Malloc the PNew is failed.\n"); exit(1); } else { PNew->data=val; PNew->next=P->top; P->top=PNew; P->size++; } return P; } /***计算栈的大小***/ int Size_Stack(PStack P) { /*int size=0; PNode PCurrent=(PNode)malloc(sizeof(Node)); PCurrent=P->top; while(NULL!=PCurrent) { size++; PCurrent=PCurrent->next; } return size;*/ return P->size; } /***返回栈顶数据项***/ Item Get_Item_Stack(PStack P) { if(NULL!=P->top->data && Is_Empty(P)==0) return P->top->data; } /***数据项出栈***/ Item Pop_Stack(PStack P) { Item data; PNode temp=P->top; if(NULL==temp) { printf("The stack is empty.\n"); exit(1); } data=temp->data; P->top=temp->next; P->size--; free(temp); return data; } /***清空链栈***/ void Clear_Stack(PStack P) { if(Is_Empty(P)) printf("The stack had enpty.\n"); PNode PCurrent=P->top; int i=P->size; while(i--) { P->top=PCurrent->next; P->size--; free(PCurrent); PCurrent=P->top; } } /***遍历栈,并自栈顶输出数据项***/ void Traverse_Stack(PStack P) { PNode PCurrent = P->top; int i = P->size; printf("The data of stack are:"); while(i--) { printf("%d ",PCurrent->data); PCurrent = PCurrent->next; } printf("\n"); }
程序测试:
#include<stdio.h> #include<stdlib.h> #include"Stack.h" int main() { int size=0; int top_data,Pop_data; PStack PS; PS=Creat_Stack(); if(NULL!=PS) printf("The stack is created.\n"); /***判断是否为空栈***/ if(Is_Empty(PS)) printf("The stack is empty.\n"); /***数据项入栈***/ Push_Stack(PS,2); Push_Stack(PS,3); Push_Stack(PS,5); Traverse_Stack(PS); /***计算栈的大小***/ size=Size_Stack(PS); printf("The length of stack is: %d\n",size); /***返回栈顶数据项***/ top_data=Get_Item_Stack(PS); printf("The top of data is: %d\n",top_data); /***数据项出栈***/ Pop_data=Pop_Stack(PS); printf("The Pop of data is: %d\n",Pop_data); Traverse_Stack(PS); /***清空链栈***/ Clear_Stack(PS); Traverse_Stack(PS); return 0; }
相关文章推荐
- 数据结构之单链表的C语言实现
- 数据结构之---C语言实现线索二叉树
- 数据结构之---C语言实现循环队列
- 数据结构(Data structure):用链表实现多项式的表示和运算(C语言)
- 链栈[优化].cpp [数据结构实现 之 栈]
- 数据结构之---C语言实现银行模拟(离散化)
- c语言实现通用数据结构(三):通用椎栈
- c语言实现通用数据结构(五):通用映射(HashMap)
- 数据结构之---C语言实现共享栈
- 数据结构与C语言实现(二)——堆栈和队列
- 数据结构之---C语言实现串的块链存储表示
- 数据结构之---C语言实现希尔排序
- [数据结构]图基于邻接矩阵的BFS与DFS的C语言简单实现
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- c语言实现通用数据结构(一):通用链表
- 数据结构之---C语言实现直接插入排序
- 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法
- c语言实现单链表数据结构及其基本操作
- 数据结构——顺序表实现(c语言)
- 数据结构之---C语言实现连式多项式