算法学习 - 栈的链表实现(C++)
2014-07-28 00:54
405 查看
栈是用的很多的一个数据结构,这里写用链表实现的方法。
栈是先进后出,能解决很多问题,例如:括号匹配,后缀表达式等。
也可以用数组来实现~ 数组的话比较简单,也可以用链表游标~
下面贴代码,基本操作比较少。
下次写栈解决的括号匹配问题和后缀表达式的求解~
栈是先进后出,能解决很多问题,例如:括号匹配,后缀表达式等。
也可以用数组来实现~ 数组的话比较简单,也可以用链表游标~
下面贴代码,基本操作比较少。
// // main.cpp // Stack // // Created by Alps on 14-7-27. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> using namespace std; struct Node; typedef Node * PtrToNode; typedef PtrToNode Stack; struct Node{ int X; PtrToNode Next; }; int isEmpty(Stack S){ return S->Next == NULL; } Stack createStack(void){ Stack S; S = (Stack)malloc(sizeof(Node)); S->Next = NULL; return S; } void Push(Stack S, int X){ Stack element; element = (Stack)malloc(sizeof(Node)); element->X = X; element->Next = S->Next; S->Next = element; } void Pop(Stack S){ if (!isEmpty(S)) { Stack tmp = S->Next; S->Next = tmp->Next; free(tmp); }else{ printf("Empty stack can't pop cell\n"); } } int Top(Stack S){ int X; if (!isEmpty(S)) { return X = S->Next->X; }else{ printf("empty stack, no top cell\n"); } return 0; } void makeEmpty(Stack S){ if (S == NULL) { printf("create stack first\n"); } while (!isEmpty(S)) { Pop(S); } } int main(int argc, const char * argv[]) { Stack S = createStack(); Push(S, 2); Push(S, 4); Push(S, 6); Push(S, 8); printf("%d\n",Top(S)); Pop(S); printf("%d\n",Top(S)); makeEmpty(S); printf("%d\n",Top(S)); return 0; }
下次写栈解决的括号匹配问题和后缀表达式的求解~
相关文章推荐
- 算法学习第二课链表C语言实现
- 算法学习 - 链表的游标实现~ C++
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 算法学习,单链表 C# 泛型实现
- 经典算法学习——链表实现冒泡排序
- 算法(第四版)学习笔记之java实现栈和队列(链表实现)
- 粒子学习算法一维实现
- 双向循环链表插入算法的C++程序实现
- 有C语言实现链表的专题学习过程
- 《Delphi 算法与数据结构》学习与感悟[6]: 一个简单的"单向链表"
- 常见算法学习及其Java实现--冒泡算法实现
- SortedList排序列表 算法实现 -- (实现了两个有序链表的归并排序功能)
- 双向循环链表删除算法的C++程序实现
- 单输出感知器学习算法实现修改
- 学习算法导论-插入查询(递归实现)
- 常见算法学习及其Java实现--插入排序算法
- 双向链表的单指针实现(算法导论习题)
- C++ 学习练手 - 双向链表的模板实现
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- 《Delphi 算法与数据结构》学习与感悟[8]: 单向链表的添加、删除与遍历