#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. 关于C#本质论和CLR via C#中译本,不吐不快

    C#本质论和CLR via C#两本好书,周老师可能是俗务缠身,太忙了吧,翻译得只能让人呵呵了. 你要是忙,别接那么多活好不啦. 现在都在说供给侧改革,都在大力提倡工匠精神,我们做技术的,还是踏实点好 ...

  2. Sublime插件安装

    来在Sublime text3上安装Package Control 使用Ctrl+`(ESC下边的那个~)快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: imp ...

  3. Mysql字符类型比较

    一. binary和char比较: binary 字节为单位,char字符为单位,字符占几个字节取决于字符集 binary  比较规则基于字节值,char基于字符,即使是_bin的比较规则 范围都0- ...

  4. javascript date picker

    一个简洁的date picker <html><head><meta http-equiv="Content-Type" content=" ...

  5. SQL数据库与excel表格之间的数据 导入

  6. Ubuntu 14.10安装SecureCRT 7.3(转)

    原文 :http://blog.csdn.net/chszs/article/details/40623169 1.软件准备 Ubuntu14.04 x64 下载SecureCRT7.3的版本:scr ...

  7. window SVN设置忽略文件列表

    进入checkout的项目文件夹. 执行 mvn install.生成 target文件夹. 如果这时候不想让target文件夹纳入版本控制.则进入子文件夹,在target文件夹上 右键执行 查看设置 ...

  8. mapreduce出现类似死锁情况

    在往hbase表里通过bulkload导数据时,某个mapreduce跑了一个多小时还没跑,看yarn界面,发现map还有一小部分没跑完,没跑完的map全在pending,running中没有,同时r ...

  9. AIX 环境下动态路由

    IBM AIX v5.3操作系统环境下动态路由配置如下: 1,用命令lssrc -S routed和lssrc -S gated分别检查routed和gated子系统是是活动状态.如果这两个子系统为活 ...

  10. ---arch linux 下装wordpress

    首先要先装apach和phphttps://translate.google.com/translate?hl=zh-CN&sl=de&tl=en&u=https%3A%2F% ...