C语言的方式实现栈:

#include <stdio.h>

#include<stdlib.h>

#include<assert.h>

struct Link

{

int data;

struct Link* next;

};

struct Stack

{

struct Link* head;

int size;

};

void StackInit(struct Stack* stack)

{

stack->head = NULL;

stack->size = 0;

}

void StackPush(struct Stack* stack, const int data)

{

struct Link* node;

node = (struct Link*)malloc(sizeof(struct Link));

assert(node != NULL);

node->data = data;

node->next = stack->head;

stack->head = node;

++stack->size;

}

int StackEmpty(struct Stack* stack)

{

return (stack->size == 0);

}

int StackPop(struct Stack* stack, int* data)

{

if (StackEmpty(stack))

{

return 0;

}

struct Link* tmp = stack->head;

*data = stack->head->data;

stack->head = stack->head->next;

free(tmp);

--stack->size;

return 1;

}

void StackCleanup(struct Stack* stack)

{

struct Link* tmp;

while (stack->head)

{

tmp = stack->head;

stack->head = stack->head->next;

free(tmp);

}

stack->size = 0;

}

int main(void)

{

struct Stack stack;

StackInit(&stack);

int i;

for (i = 0; i < 5; i++)

{

StackPush(&stack, i);

}

while (!StackEmpty(&stack))

{

StackPop(&stack, &i);

printf("%d ", i);

}

printf("\n");

return 0;

}

C++数据抽象的方式实现栈:

#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_(0), size_(0)

{

}

~Stack()

{

Link* tmp;

while (head_)

{

tmp = head_;

head_ = head_->next_;

delete tmp;

}

}

void Push(const int data)

{

Link* node = new Link(data, head_);

head_ = node;

++size_;

}

bool Empty()

{

return (size_ == 0);

}

bool Pop( int& data)

{

if (Empty())

{

return false;

}

Link* tmp = head_;

data = head_->data_;

head_ = head_->next_;

delete tmp;

--size_;

return true;

}

private:

Link* head_;

int size_;

};

int main(void)

{

Stack stack;

int i;

for (i = 0; i < 5; i++)

{

stack.Push(i);

}

while (!stack.Empty())

{

stack.Pop(i);

cout << i << " ";

}

cout << endl;

return 0;

}

分别用C/C++实现栈的更多相关文章

  1. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  2. Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

    --reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...

  3. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  4. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  5. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  6. BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]

    4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discu ...

  7. BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1054[Submit][Status ...

  8. .NET全栈开发工程师学习路径

    PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...

  9. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  10. 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置

    0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...

随机推荐

  1. java设计模式笔记(1)-适配器模式

    适配器的定义 适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口.比如:电源适配器.三角架基座转接部件.USB与串口的转接设备等. ...

  2. GitHub优秀的Android 开源项目

    GitHub上优秀Android开源项目 转载自 : http://my.eoe.cn/sisuer/archive/3348.html http://my.eoe.cn/sisuer/archive ...

  3. UVa 10057 - A mid-summer night's dream

    题目大意:给n个数,找一个数A使得A与这n个数的差的绝对值最小.输出A最小的可能值,n个数中满足A的性质的数的个数以及满足A性质的不同的数的个数(不必从这n个数中挑选). 看见绝对值就想到了数轴上点之 ...

  4. 05 Linux字符驱动---静态注册

    1. mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h& ...

  5. 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》

    VII页 , 倒数第二行, “其他” 应为 “其它” X页, 源代码有错误,说是有19章,实际一共13章 XI页,勘误表的链接也是错误的  .是该书的<Beginning ASP.NET 4.5 ...

  6. 2.2. 添加托管对象模型(Core Data 应用程序实践指南)

    右键分组Grocery Dude > New Group > Data Model New File > Core Data > 创建新的模板文件

  7. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  8. 【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

    HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expo ...

  9. HDU-2031-进制转换

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others)    M ...

  10. 解决xtrabackup command not found no mysqld group 问题

    现象:手动执行xtrabackup没问题,环境变量检查过也没问题.放到执行计划中 会报错: sh: xtrabackup_56: command not found innobackupex: Err ...