链栈的实现(双指针 带头结点) C语言版
2011-08-31 20:04
387 查看
/* 带头结点,双指针的链栈实现 作者:S_hmily 日期:2011年8月31日 编译环境:VC++6.0 */ /*************************************************************/ #include <stdio.h> #include <malloc.h> #include <stdlib.h> /*************************************************************/ #define TRUE 1 #define FALSE 0 typedef struct node { int data; struct node *pNext; }Node, *pNode; typedef struct{ pNode pTop; pNode pBottom; }STACK, *pSTACK; /*************************************************************/ void init_stack(pSTACK pS); void push_stack(pSTACK pS, int val); int pop_stack(pSTACK pS, int *pVal); void traverse(pSTACK pS); int empty(pSTACK pS); /*************************************************************/ int main(void) { STACK stack; int val; init_stack(&stack); push_stack(&stack, 1); // traverse(&stack); if (pop_stack(&stack, &val)) printf("出栈的元素是%d\n", val); else printf("栈空\n"); // traverse(&stack); return 0; } /*************************************************************/ void init_stack(pSTACK pS) { pS->pTop = (pNode)malloc(sizeof(Node)); if (NULL == pS->pTop) { printf("动态内存分配失败"); exit(-1); } pS->pBottom = pS->pTop; pS->pBottom->pNext = NULL; } /*************************************************************/ void push_stack(pSTACK pS, int val) { pNode pNew = (pNode)malloc(sizeof(Node)); if (NULL ==pNew) { printf("动态内存分配失败"); exit(-1); } pNew->data = val; pNew->pNext = pS->pTop; pS->pTop = pNew; } /*************************************************************/ void traverse(pSTACK pS) { pNode p = pS->pTop; while (p != pS->pBottom) { printf("%d ", p->data); p = p->pNext; } } /*************************************************************/ int empty(pSTACK pS) { if (pS->pTop == pS->pBottom) return TRUE; else return FALSE; } /*************************************************************/ int pop_stack(pSTACK pS, int *pVal) { pNode p = pS->pTop; if ( empty(pS) ) return FALSE; *pVal = p->data; pS->pTop = p->pNext; free(p); p = NULL; return TRUE; } /*************************************************************/
相关文章推荐
- 双指针不带头结点的链栈的实现(C语言)
- 链栈的实现(单指针 无头结点) C语言版
- 双指针不带头结点的链栈的实现(C语言)
- 用c语言实现链栈 (带头结点)
- 数据结构模版----单链表SimpleLinkList[不带头结点](C语言实现)
- C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
- 设ha和hb分别是两个带头节点的费递减有序单链表的表头指针,设计以算法,将将两个有序链表合成一个非递减的有序单链表,该程序以以前发表的博客中的链表中的区别在与该立案表带有头结点
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- 带头结点的单链表实现就地逆置的更优方法
- 单向不带头结点不带环的链表实现
- C_栈和队列(ADT)-队列的非循环(带头指针)顺序表示和实现
- 单链表、带头结点的单链表、循环单链表 以及其操作实现
- 单链表的实现(带头结点)
- C语言实现单链表-不带头结点
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
- 经典算法学习——单链表实现冒泡排序(带头结点)
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- 数据结构-java与c实现带头结点的单链表
- C语言版带头指针的单向链表
- 数据结构模版----单链表SimpleLinkList[带头结点](C语言实现)