算法-数据结构-堆栈

发布时间:2005-09-09 17:46:22来源:红联作者:frog

/****************************************************************

Title : stack.c

Author : 张龙

Time : 200508

*****************************************************************/

#include "stdio.h"

#define STACK_SIZE 100

typedef int ElementType;

typedef struct _stacknode

{

ElementType data;

struct _stacknode *next;

} stacknode;

typedef struct _stack

{

stacknode *top,*bottom;

int count;

} stack;

/*========================functions declaration===================*/

void init(stack *s);

int IsEmpty(stack *s);

int IsFull(stack *s);

int GetStackSize();

int length(stack *s);

ElementType top(stack *s);

int push(stack *s,ElementType x);

int pop(stack *s);

/*====================function implementation================*/

void init(stack *s)

{

s->top=s->bottom=0;

s->count=0;

}

int IsEmpty(stack *s)

{

if(!s->count)

return 1;

else

return 0;

}

int IsFull(stack *s)

{

if(s->count==STACK_SIZE)

return 1;

else

return 0;

}

int GetStackSize()

{

return STACK_SIZE;

}

int length(stack *s)

{

return s->count;

}

ElementType top(stack *s)

{

return s->top->data;

}

int push(stack *s,ElementType x)

{

stacknode *node;

if(IsFull(s)){

printf("the stack is full,no new data can be inserted.\n");

return 0;

}

if(!s->bottom){

node=s->bottom=s->top=(stacknode *)malloc(sizeof(stacknode));

node->data=x;

}

else{

node=(stacknode *)malloc(sizeof(stacknode));

node->data=x;

s->top->next=node;

s->top=node;

}

s->count++;

return;

}

ElementType pop(stack *s)

{

int i,j;

ElementType data;

stacknode *node;

if(IsEmpty(s)){

printf("the stack is empty,no data is popped up\n");

return 0;

}

data=s->top->data;

free(s->top);

s->count--;

j=s->count;

if(j==1){

s->top=s->bottom;

s->top->next=0;

}

else{

for(i=0;iif(i==0){

node=s->bottom;

}

else{

node=node->next;

}

}

s->top=node;

s->top->next=0;

}

return data;

}

/*========================main function========================*/

int main(int argc,char*argv[])

{

int i,j;

stack *mystack;

mystack=(stack *)malloc(sizeof(stack));

init(mystack);

for(i=0;i<100;i++){

j=i+3;

push(mystack,j);

printf("%d ",top(mystack));

}

printf("\n");

printf("the size of stack is %d\n",GetStackSize());

printf("the current length of stack is %d\n",length(mystack));

for(i=0;i<50;i++){

printf("%d ",pop(mystack));

}

printf("\n");

printf("the size of stack is %d\n",GetStackSize());

printf("the current length of stack is %d\n",length(mystack));

return 1;

}

linux 复制栈数据结构,算法-数据结构-堆栈相关推荐

  1. 程序 = 数据结构 + 算法《禅与计算机程序设计艺术》 / 陈光剑

    程序 = 数据结构 + 算法 "数据结构和算法是过去 50 年来最重要的发明之一,它们是软件工程师需要了解的基础工具." <Think Data Structures: Al ...

  2. 微软等数据结构+算法面试100题全部答案集锦 复制过来比较乱

    亲,"社区之星"已经一周岁了!        WebApp实时开源框架Clouda---认识心得      Tag功能介绍-我们为什么打Tag      订阅CSDN社区周刊,及时 ...

  3. java 栈 先进后出_数据结构: 先进后出——堆栈

    栈是一种常用的数据结构,在生活中经常遇到这样的例子,如铁路调度站.本节将详细介绍堆栈的实现过程. 算法点拨(顺序栈) 栈是一种重要的数据结构.从数据结构的角度看,栈也是线性表,其特殊性在于栈的基本操作 ...

  4. linux 算法函数,数据结构——算法之(012)( linux C 全部字符串操作函数实现)...

    数据结构--算法之(012)( linux C 所有字符串操作函数实现) 题目:实现linux C下常用的字符串操作函数 题目分析: 一.面试中可能经常遇到这样的问题:比如strcpy.memcpy. ...

  5. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

    给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...

  6. 数据结构算法 - 栈

    数据结构算法 - 栈 栈 是一种操作受限的 线性表,在我们平时的日常生活中,可以看到许多与之相似的场景.比 如一层一层叠起来的盘子,我们网上叠的时候,是一个个一个向上叠加,我们在取的时候,也是从最上面 ...

  7. 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果

    有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...

  8. 有趣的数据结构算法9——利用栈完成2进制到8进制的转换

    有趣的数据结构算法9--利用栈完成2进制到8进制的转换 解题思路 实现代码 GITHUB下载连接 刚学习完栈的我想试试栈都可以干嘛,于是找到了一个小应用,利用栈完成2进制到8进制的转换.如果大家还不清 ...

  9. 【经典回放】多种语言系列数据结构算法:栈(JavaScript版)

    本文采用JavaScript语言实现栈结构算法并举例应用. JavaScript的栈是数组对象中自动提供的,这点如同C#,实际也不需要自己编写什么栈的程序,如果你用: var s=new Array( ...

最新文章

  1. DEARGUI的安装
  2. poj2976Dropping tests (二分搜索+还是涉及昨天遇见的o1分数规划)
  3. Caffe:solver及其配置
  4. RFID自动识别术语解释(zt)
  5. 【Flask】request请求
  6. eclipse搭建SSH框架详解
  7. MutualNet:一种“宽度-输入分辨率”互相学习的网络轻量化方法
  8. Vue工程报错解决方案Warn:import Vue from “vue“;
  9. [MyBatis]诡异的Invalid bound statement (not found)错误
  10. gettype拿不到值_这五种古董,别说是买豪车豪宅,放在现实中最多就值一顿饭钱...
  11. 数据库-如何快速创建连接字符串
  12. 自动回复html模板邮件,outlook休假自动回复
  13. 计算机证书都需要哪些知识,计算机资格证书有哪些计算机专业证书有哪些
  14. 软考高项-项目管理师知识点整合
  15. 洛谷 P3957 跳房子
  16. 考过HCIP入职心仪公司,分享华为认证学习经历及心得
  17. 密码学系列(一):密码行业、政策介绍
  18. c语言短信猫开发代码
  19. 面试题练习(Java基础(二))
  20. [多图]非线性格兰杰因果检验,eveiws详细实现步骤

热门文章

  1. Media Query在SAP Spartacus里的用途
  2. 使用Angular HTTP client对数据模型进行update操作
  3. 如何使用SAP Cloud for Customer OData服务创建Lead
  4. Cannot add product to Opportunity in Fiori - RFC error
  5. SAP OData Service group - get entity set
  6. 如何找到Fiori Launchpad tile所属的catalog id
  7. 使用Java程序通过http post访问Application server
  8. CRM One order里user status和system status的mapping逻辑
  9. 如何手动删除一个business document和pricing document的relationship
  10. nodejs request module里的json参数的一个坑