#include <stdio.h>
#include <stdlib.h>
#include <assert.h> struct LinkNode
{
int data;
struct LinkNode* next;
}; struct Stack
{
struct LinkNode* head;
int size;
}; void StackInit(struct Stack* stack)
{
stack->head = NULL;
stack->size = ;
} void StackPush(struct Stack* stack, const int num)
{
struct LinkNode* node = (struct LinkNode*)malloc(sizeof(struct LinkNode));
assert(node != NULL);
node->data = num;
node->next = stack->head;
stack->head = node;
++stack->size;
return;
} int StackEmpty(struct Stack* stack)
{
return (stack->size == );
} int StackPop(struct Stack* stack, int* num)
{
if (StackEmpty(stack) == )
return ; *num = stack->head->data;
struct LinkNode* tmp;
tmp = stack->head;
stack->head = stack->head->next;
--stack->size;
free(tmp);
return ;
} void StackCleanup(struct Stack* stack)
{
struct LinkNode* tmp;
while (stack->head != NULL)
{
tmp = stack->head;
stack->head = stack->head->next;
free(tmp);
} stack->size = ;
return;
} int main(void)
{
struct Stack stack;
StackInit(&stack);
int i;
for (i = ; i < ; i++)
{
StackPush(&stack, i);
} while (!StackEmpty(&stack))
{
StackPop(&stack, &i);
printf("%d ", i);
} printf("\n");
return ;
}
#include <iostream>
using namespace std; class Stack
{
struct Link
{
int data_;
Link* next_;
Link(int data, Link* next) :data_(data), next_(next)
{ }
}; public:
Stack() :head_(), size_()
{ } ~Stack()
{
Link* tmp;
while (head_ != NULL)
{
tmp = head_;
head_ = head_->next_;
delete tmp;
} return;
} void Push(const int num)
{
Link* node = new Link(num, head_);
head_ = node;
++size_;
return;
} bool Empty()
{
return (size_ == );
} bool Pop(int& num)
{
if (Empty() == )
return false; num = head_->data_;
Link* tmp = head_;
head_ = head_->next_;
--size_;
delete tmp;
return true;
} private:
Link *head_;
int size_;
}; int main(void)
{
Stack stack;
int i;
for (i = ; i < ; i++)
{
stack.Push(i);
} while (!stack.Empty())
{
stack.Pop(i);
cout<<i<<" ";
} cout<<endl;
return ;
}

用c和c++的方式实现栈的更多相关文章

  1. Java三种方式实现栈和队列

    栈:LIFO(后进先出) 队列:FIFO(先进先出) 1.栈:LIFO(后进先出) 1.1.栈的顺序存储结构实现: /** * 基于数组实现的顺序栈 * @param <E> */ pub ...

  2. ARM的栈指令

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  3. C语言中的栈和堆

    原文出处<http://blog.csdn.net/xiayufeng520/article/details/45956305#t0> 栈内存由编译器分配和释放,堆内存由程序分配和释放. ...

  4. 【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要翻译 一来是为了感受国外优秀技术社区知名博主的高质量文章,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果,最后也是为了锻炼一下自己的英文读写能力.因为是首次翻译英文文章(哎,原谅我这个 ...

  5. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  6. .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱 (转)

    作者: Edison Chou  来源: 博客园  发布时间: 2014-09-03 15:59  阅读: 318 次  推荐: 2   原文链接   [收藏]   原文作者:Shivprasad k ...

  7. .NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要翻译 一来是为了感受国外优秀技术社区知名博主的高质量文章,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果,最后也是为了锻炼一下自己的英文读写能力.因为是首次翻译英文文章(哎,原谅我这个 ...

  8. 栈的C++实现(数组)——创建-push-pop-top-清空栈-处理栈

    今天学习了利用数组方式的栈的C++实现,这种方式跟指针实现有很多不一样的地方: 栈的指针实现,栈的创建申请头结点,push需要申请新的结点,pop释放结点,这些结点都放在第一个位置,top时,S-&g ...

  9. 栈的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...

随机推荐

  1. Linux CentOS 7通过yum命令安装Mono4.0.1

    前言 上一篇中提到的快照方式安装Mono,该方式并不稳定,需要做各种配置,各种修改才能与jexus搭配运行. 一.安装源 rpm --import "http://keyserver.ubu ...

  2. 三剑客之SED

    Sed功能说明      Sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [root@old ~]# sed --versio ...

  3. 用systemd脚本自动启动node js程序

    vi /usr/lib/systemd/system/pano.service [Unit] Description=pano - main site of site_name.com Documen ...

  4. STL迭代器之一:偏特化

    在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...

  5. 设置TextBox控件的TextMode属性

    我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...

  6. iOS9中的App Transport Security

    问题:webView加载网页加载不出来 原因:苹果在iOS9 sdk中加入了App Transport Security限制(iOS9以前的iOS sdk默认关闭ATS),默认强制使用https,并且 ...

  7. JS原型和继承

    //所有的函数都有一个prototype属性 function aa() { } console.info(aa.prototype); //这个prototype属性引用了一个对象,即原型,初始化时 ...

  8. php sleep()的实时输出打印,清除ob缓冲区

    @ini_set('implicit_flush',1);ob_implicit_flush(1);@ob_end_clean(); echo 1;//echo str_repeat('', 1024 ...

  9. js判断input输入框长度(支持中英文输入)

    function CheckTxtLength(txt) { var num = txt.replace(/[^\x00-\xff]/g, 'xx').length; if (num <=11) ...

  10. 批量部署ssh信任关系

    要求1:大批量部署SSH信任关系,在A文件分发服务器上大批量部署WEB层面信任关系文件分发服务器为:10.0.3.9 登录用户为:zhangsan WEB层IP段:10.0.3.10~10.0.3.6 ...