栈是仅在表尾进行插入、删除操作的线性表。即栈 S= (a1, a2, a3, ………,an-1, an),其中表尾称为栈顶 /top,表头称为栈底/base。

由于只能在表尾进行操作,因此栈的运算规则就是“后进先出”(LIFO)

和线性表类似,栈也有两种存储结构——顺序栈与链栈

1.顺序栈的C语言实现#include

#include

typedef struct Stack {

int *data;//数据域

int size;//栈长度,也是栈顶数组下标-1

int max;//栈最大容量

} Stack;

//初始化

Stack *initStack(int max)

{

struct Stack *stack;

stack = (struct Stack *)malloc(sizeof(struct Stack));

stack->size = 0;

stack->max = max;

stack->data = (int*)malloc(sizeof(int)*max);

return stack;

}

//压栈

void push(Stack *stack, int item)

{

if (stack->size >= stack->max)

{

printf("stack is full! \n");

}else{

stack->data[stack->size++] = item;

}

}

//出栈

int pop(Stack *stack)

{

if (stack->size >= 0)

{

return stack->data[--stack->size];

}

}

//test

int main()

{

struct Stack *stack;

stack = initStack(3);

push(stack,1);

push(stack,2);

push(stack,3);

push(stack,4);

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

push(stack,5);

push(stack,6);

push(stack,7);

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

return 0;

}

测试效果:

2.链栈的C语言实现

本想偷懒,算了,还是写一遍吧,区别只是用链表去代替了数组,其实还不如数组方便省事一。一,但是可以无限长,,,#include

#include

typedef struct StackNode {

int data;//数据域

struct StackNode *next;//指针域,这里用next或者pre都行,看怎么规定左右了,如果是左进左出那就是next,右进右出就是pre好理解

} StackNode;

typedef struct LinkedStack {

int size;//栈长度

int max;//栈最大容量

struct StackNode *top;//指针域

} LinkedStack;

//初始化

LinkedStack *initStack(int max)

{

struct LinkedStack *stack;

stack = (struct LinkedStack *)malloc(sizeof(struct LinkedStack));

stack->size = 0;

stack->max = max;

stack->top = NULL;

return stack;

}

//压栈

void push(LinkedStack *stack, int item)

{

if (stack->size >= stack->max)

{

printf("stack is full! \n");

}else{

struct StackNode *node;

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

node->data = item;

node->next = stack->top;

stack->size++;

stack->top = node;

}

}

//出栈

int pop(LinkedStack *stack)

{

if (stack->size > 0)

{

struct StackNode *top;

top = stack->top;

stack->top = top->next;

stack->size--;

return top->data;

}

}

int main()

{

struct LinkedStack *stack;

stack = initStack(3);

push(stack,1);

push(stack,2);

push(stack,3);

push(stack,4);

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

push(stack,5);

push(stack,6);

push(stack,7);

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

printf("stack out:%d \n", pop(stack));

return 0;

}

c语言怎样计算栈的长度,数据结构与算法:栈 C语言实现相关推荐

  1. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  2. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  3. 资料分享:送你一本《数据结构与算法:Python语言描述》电子书!

    下图为 TIOBE 3月编程语言排行榜. 从榜单来看,曾经铁打的 Java.C.C++ 局势,早已在数月前被 Python 的闯入而打破.究其根由,并非是 C++ 的应用领域正在逐渐缩减,而是随着人工 ...

  4. 《数据结构与算法:Python语言描述》一1.3算法和算法分析

    本节书摘来自华章出版社<数据结构与算法:Python语言描述>一书中的第1章,第1.3节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看 1.3算法 ...

  5. python思想读后感_数据结构与算法:Python语言描述读后感1000字

    <数据结构与算法:Python语言描述>是一本由裘宗燕著作,机械工业出版社出版的平装图书,本书定价:CNY 45.00,页数:343,特精心从网络上整理的一些读者的读后感,希望对大家能有帮 ...

  6. 数据结构-排序算法(c语言实现篇)

    数据结构-排序算法(c语言实现篇) 排序算法是非常常用的算法,从介绍排序的基本概念,到介绍各种排序算法的思想.实现方式以及效率分析.最后比较各种算法的优劣性和稳定性. 1 排序的概念及应用 1.1 排 ...

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

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

  8. 数据结构与算法-栈与队列

    数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...

  9. 数据结构与算法(C语言) | 栈和队列——栈(自己做过测试)

    栈是一种重要的线性结构,通常称,栈和队列是限定插入和删除只能在表的"端点"进行的线性表.(后进先出) –栈的元素必须"后进先出". –栈的操作只能在这个线性表的 ...

最新文章

  1. pip 升级之后提示 bash: /usr/bin/pip3: No such file or directory
  2. for android 软件,安卓特工 for Android
  3. fatal error C1189: #error : Building MFC application with /MD[d]
  4. php多线程安装pthreads步骤详解
  5. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
  6. leetcode 1720. 解码异或后的数组(位运算)
  7. 情绪调节的自适应_如何做好情绪的管理者
  8. KMP算法 串模式识别 用nextval[j]改进next[j]
  9. C++效率在此笔者不想通过反汇编来实验
  10. 面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现
  11. 为什么一定要重视隐式反馈?
  12. conn.setAutoCommit(true) and conn.close() 关系
  13. setitime和相关函数
  14. 【JAVA视频压缩】-------轻量级视频压缩组件JAVE
  15. 转载《由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断》的解决方案
  16. DOM Scripting 学习六 - Image Gallery
  17. python 函数名大小写
  18. 总是在崩溃的边缘徘徊,可能这就是成年人的生活吧!!!!
  19. docker删除镜像及容器
  20. 图书推荐:《Web前端黑客技术揭秘》

热门文章

  1. Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
  2. 解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)
  3. python免费下载及安装_Python的下载及安装
  4. android 服务端 导入工程,如何导入与配置从网上下载的android源代码及服务器端源代码...
  5. linux 脚本 java_Linux 通过脚本执行Java程序
  6. 服务器网盘系统怎么装,云服务器上怎么安装操作系统
  7. python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...
  8. linux中python安装_linux环境下的python安装过程图解(含setuptools)
  9. python能开发什么产品_三周学 Python ?不,三周做个产品
  10. 数据库查找姓李的人_最通俗易懂的理解什么是数据库