用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. SVN上传文件提示磁盘空间不足的问题

    SVN上传文件大于100M,提示:Commit failed (details follow):While preparing 'E:\AFCData\tjsc20db_table.sql' for ...

  2. Git配置姓名和邮箱问题

    今天在安装Git for windows完成后,配置姓名和邮箱.按照廖雪峰老师的步骤,在开始菜单里找到"Git"->"Git Bash",单击后并没有跳出 ...

  3. nodeJS搭建本地服务器

    准备工作: 安装Node JS: 1:安装全局express:在express4.x版本中,安装时语句变为了这样: npm install -g express-generator 2:创建项目: 选 ...

  4. NSMutableAttributedString(转)

    NSMutableAttributedString计算高度的问题 _label_page2_1 = [[UILabel alloc] init]; _label_page2_1.numberOfLin ...

  5. Win10 UI介绍之Titlebar

    活动状态 非活动状态 var titleBar = ApplicationView.GetForCurrentView().TitleBar; titleBar.BackgroundColor = C ...

  6. [数学]内接多边形求pi

  7. mysql开发小结

    目录 1. 使用mybatis操作mysql数据库SUM方法返回NULL解决 2. limit m,n 1. 使用mybatis操作mysql数据库SUM方法返回NULL解决解决方案一: SELECT ...

  8. SQL性能学习汇总 00

    .在一条语句中不要重复使用相同的函数 .尽可能在存储过程中使用临时变量和临时表 如 IF (Object_ID('tempdb..#T') IS NOT NULL) DROP TABLE #T SEL ...

  9. Android开发环境(IDE)

    一:Eclipse 1.装JDK: 2.装Eclipse://应与JDK同为32/64位. 3.装ADT: 4.装android sdk: 推荐下载ADT bundle包(包含Eclipse,Andr ...

  10. [工作中的设计模式]解释器模式模式Interpreter

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...