数据结构学习——栈的链表实现(程序化)
2015-04-08 21:37
387 查看
关于栈的基本概念以及和Catalan数的关系,可以参见我的其他文章
参考资料《数据结构与算法分析——C语言描述》
参考资料《数据结构与算法分析——C语言描述》
#include<stdio.h> #include<stdlib.h> /*栈的链表实现*/ typedef struct StackNode { struct StackNode *next; int data; }StackNode,*Stack; Stack CreateStack(void);//创建一个空栈 void MakeEmpty(Stack S);//清空栈 int IsEmpty(Stack S);//测试是否是空栈 void Push(int data,Stack S);//入栈 void Pop(Stack S);//出栈 int Top(Stack S);//返回栈顶元素 int main() { Stack SP=NULL; SP=CreateStack(); Push(5,SP); Push(4,SP); Push(8,SP); printf("%d\n",Top(SP)); Pop(SP); printf("%d\n",Top(SP)); return 0; } Stack CreateStack(void) { Stack S; S=malloc(sizeof(StackNode)); if(S==NULL) printf("out of space!\n"); S->next=NULL; MakeEmpty(S); return S; } void MakeEmpty(Stack S) { if(S==NULL) printf("Please Create Stack First!\n"); else while(!IsEmpty(S)) Pop(S); } int IsEmpty(Stack S) { return S->next==NULL; } void Push(int data,Stack S) { Stack tmp; tmp=malloc(sizeof(StackNode)); if(tmp==NULL) printf("out of space!\n"); else { tmp->data=data; tmp->next=S->next; S->next=tmp; } } void Pop(Stack S) { Stack tmp; if(IsEmpty(S)) printf("empty stack!\n"); else { tmp=S->next; S->next=S->next->next; free(tmp); } } int Top(Stack S) { if(!IsEmpty(S)) return S->next->data; else printf("empty stack!\n"); return 0; }
相关文章推荐
- 数据结构学习笔记之链表分析与实现(一)
- 【C++数据结构学习笔记---栈】用链表实现栈
- python数据结构学习笔记-2016-10-28-03-用链表实现多项式ADT
- 数据结构学习笔记之链表分析与实现(二)
- 数据结构学习:单向链表的模板类实现
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构学习-线性表-链表的代码实现
- 学习《数据结构》有感之以字符串形式输入链表实现多项式相加
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 数据结构学习的简单问题(三):用链表实现多项式相加
- 数据结构学习之链表的Java实现
- 数据结构学习系列二-链表的C++实现
- 【C++数据结构学习笔记---线性表】用单链表实现线性表
- 数据结构学习之链表(单向、单循环以及双向)(递归实现)
- 数据结构学习之单向链表的基本操作(非递归实现)
- 数据结构学习---线性表链表实现
- python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)
- 数据结构学习中的简单问题(一):用链表方式实现的队列输出杨辉三角