【数据结构】链栈
2015-10-20 08:59
316 查看
Lstack.h
mian.cpp
#pragma once #include<iostream> #include <stdlib.h> using namespace std; #define Elemtype int typedef struct Nstack { Elemtype data; Nstack* next; }Node;//节点 typedef struct { Node* top; int size; }Lstack;//栈结构 void Init(Lstack *st) { st->top = (Node*)malloc(sizeof(Node)); if (!st->top) return; st->top->next= NULL; st->top = NULL; st->size = 0; } void Push(Lstack *st, Elemtype &x) { Node* p = (Node*)malloc(sizeof(Node)); if (!p) return ; p->data = x; p->next = st->top; st->top = p; st->size++; } bool Empty(Lstack *st) { return st->size==0; } void Pop(Lstack *st, Elemtype&e) { if (!Empty(st)) { cout << "栈为空,不能删除!" << endl; return; } Node*cur = st->top; e = cur->data; st->top = st->top->next; free(cur); st->size--; } void Gettop(Lstack *st,Elemtype &e) { if (!Empty(st)) { cout << "栈为空,没有栈顶元素!" << endl; return; } Node* temp = st->top; e = st->top->data; cout << "栈顶元素:" << e << endl; } void Length(Lstack *st) { cout << "栈长为:" << st->size << endl; } void Clear(Lstack *st) { if (Empty(st)) return; st->size = 0; Node* p=NULL; while (st->top!=NULL) { p = st->top; st->top = p->next; free(p); } } void Destroy(Lstack *st) { Clear(st); free(st); st = NULL; } void show(Lstack *st) { Node* p = st->top; while (p) { cout << p->data; p = p->next; cout << "-->"; } cout << "栈底"<< endl; }
mian.cpp
#include"Lstack.h" void main() { Lstack q; Elemtype item; int select = 1; while (select) { cout << "**********************************" << endl; cout << "* [1] init [2] push *" << endl; cout << "* [3] gettop [4] length *" << endl; cout << "* [5] pop [6] clear *" << endl; cout << "* [7] destroy [8] show *" << endl; cout << "* [0] quit *" << endl; cout << "**********************************" << endl; cout << "please chose:>"; cin >> select; switch (select) { case 1: Init(&q); break; case 2: cout << "请输入要入栈的元素:"; cin >> item; Push(&q, item); break; case 3: Gettop(&q, item); break; case 4: Length(&q); break; case 5: Pop(&q, item); cout << "出栈元素为:" << item << endl; break; case 6: Clear(&q); break; case 7: Destroy(&q); cout<<"栈已经被销毁!不能再插入数据!"<<endl; return; case 8: show(&q); break; case 0: cout << "退出成功!" << endl; break; default: break; } } }
相关文章推荐
- 数据结构之二叉树
- 数据结构例程——哈夫曼树
- 数据结构例程——线索化二叉树(中序)
- 数据结构例程——二叉树的构造
- 数据结构相关的一些定义
- 数据结构例程——从根节点到每个叶子节点的路径之逆
- 关于10月17日#6的五道数据结构题的心得与感悟
- 数据结构例程——二叉树的层次遍历算法
- 数据结构例程——二叉树遍历的非递归算法
- Codeforces 589G Hiring (NEERC 2015 G题)
- 数据结构例程——用二叉树遍历思想解决问题
- 数据结构基础 0.前言
- 第八周项目二 数据结构之自建算法库——链串
- 数据结构例程——二叉树遍历的递归算法
- 线性表的顺序表示和实现
- 中国大学MOOC-陈越、何钦铭-数据结构 Tree Traversals Again
- Codeforces 589G Hiring(BIT + 二分)
- 1.数据结构之单链表
- 【串项目2 - 建立链串的算法库——第8周】
- 第六周--数据结构--队列的应用之报数问题