用c语言实现stack的初始化,push,pop和Clear操作

#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* sta)
{
sta->head = NULL;
sta->Size = ;
} void StackPush(struct Stack* sta, const int data)
{
struct Link* node;
node = (struct Link*)malloc(sizeof(struct Link));
assert(node != NULL);
node->data = data;
node->Next = sta->head;
sta->head = node;
++ sta->Size;
} int StackEmpty(struct Stack* sta)
{
if(sta->Size == )
return ;
return ;
} int StackPop(struct Stack* sta, int* data)
{
if(StackEmpty(sta))
return ;
struct Link* tmp = sta->head;
*data = sta->head->data;
sta->head = tmp->Next;
free(tmp);
-- sta->Size;
return ;
}
void StackClear(struct Stack* sta)
{
struct Link* tmp;
while(sta->head)
{
tmp = sta->head;
sta->head = tmp->Next;
free(tmp);
}
sta->Size = ;
} int main()
{
struct Stack sta;
StackInit(&sta);
int i;
for(i=; i<=; i++)
StackPush(&sta, i);
while(!StackEmpty(&sta))
{
StackPop(&sta, &i);
printf("%d\n", i);
}
return ;
}

  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(),Size()///初始化,构造函数;
{ }
~Stack()
{
Link* tmp;
while(head)
{
tmp = head;
head = head->Next;
delete tmp;
}
}
void Push(const int data)///插入data;
{
Link* node = new Link(data, head);
head = node;
++ Size;
}
bool Empty()
{
return (Size==);
}
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()
{
Stack sta;
int i;
for(i=; i<=; i++)
{
sta.Push(i);
}
while(!sta.Empty())
{
sta.Pop(i);
cout << i << endl;
}
return ;
}

Stack的c实现的更多相关文章

  1. 线性数据结构之栈——Stack

    Linear data structures linear structures can be thought of as having two ends, whose items are order ...

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

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

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

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

  4. Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder

    Stack Overflow 排错翻译  - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...

  5. Uncaught RangeError: Maximum call stack size exceeded 调试日记

    异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 开发道路上不是解决问题最重要,而是解决问题的过程,这个过程我们称之为~~~调试 记 ...

  6. Stack操作,栈的操作。

    栈是先进后出,后进先出的操作. 有点类似浏览器返回上一页的操作, public class Stack<E>extends Vector<E> 是vector的子类. 常用方法 ...

  7. [LeetCode] Implement Stack using Queues 用队列来实现栈

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  8. [LeetCode] Min Stack 最小栈

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  9. Stack的三种含义

    作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...

  10. Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)

    写了段jq后,报这个错,度娘未解,灵光一闪,找到原因,上代码: Html 结构: <a href="javascript:;" class="item-pic&qu ...

随机推荐

  1. .NET LINQ 数据分区

    数据分区      LINQ 中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分的操作.      下图显示对一个字符序列执行三个不同的分区操作的结果. 第一个操作返 ...

  2. MyEclipse2015配置Tomcat方法----》myeclipse2015

    1.打开Myeclipse2015,进入偏好设置window-perference,找到下图箭头指向的地方 2.点击Add按钮进入下面界面 3.点击next进入下面界面 4.选择tomat  选择JR ...

  3. CSS后代选择器可能的错误认识

    一.关于类选择器的一个问题 CSS代码: .red { color: red; } .green { color: green; } HTML代码: <div class="red&q ...

  4. Build2016上值得一看的大数据相关Session

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:Build2016开完很久了,现在才来回顾下,就说说那些和大数据相关的Session, ...

  5. Ajax请求安全性讨论

    今天我们来讨论一下ajax请求的安全性,我相信各位在系统开发过程中肯定会绞尽脑汁的想怎样可以尽量少的防止伪造ajax请求进行攻击,尤其是开发跟用户交互比较多的互联网系统.那么就请大家来分享讨论一下你在 ...

  6. android中设置控件获得焦点 (转)

    android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例:                 btn.setFocusable(true);      ...

  7. getFields()和getDeclaredFields()的区别

    getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

  8. IntelliJ IDEA 14 注册码

    IntelliJ IDEA 14 下载地址: IntelliJ IDEA 14 下载 分享几个license: (1) key:IDEA value:61156-YRN2M-5MNCN-NZ8D2-7 ...

  9. 深入分析Java ClassLoader原理

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  10. linux 添加 service 服务并自动添加 chkconfig 启动级别

    下面以添加一个叫做watchcat的服务为例进行说明: 1.写一个提供给service命令使用的脚本 service 命令的使用方法一般如下 启动: $ service watchcat start ...