c语言怎样计算栈的长度,数据结构与算法:栈 C语言实现
栈是仅在表尾进行插入、删除操作的线性表。即栈 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语言实现相关推荐
- char栈java,Java数据结构与算法-栈和队列(示例代码)
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt
数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...
- 资料分享:送你一本《数据结构与算法:Python语言描述》电子书!
下图为 TIOBE 3月编程语言排行榜. 从榜单来看,曾经铁打的 Java.C.C++ 局势,早已在数月前被 Python 的闯入而打破.究其根由,并非是 C++ 的应用领域正在逐渐缩减,而是随着人工 ...
- 《数据结构与算法:Python语言描述》一1.3算法和算法分析
本节书摘来自华章出版社<数据结构与算法:Python语言描述>一书中的第1章,第1.3节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看 1.3算法 ...
- python思想读后感_数据结构与算法:Python语言描述读后感1000字
<数据结构与算法:Python语言描述>是一本由裘宗燕著作,机械工业出版社出版的平装图书,本书定价:CNY 45.00,页数:343,特精心从网络上整理的一些读者的读后感,希望对大家能有帮 ...
- 数据结构-排序算法(c语言实现篇)
数据结构-排序算法(c语言实现篇) 排序算法是非常常用的算法,从介绍排序的基本概念,到介绍各种排序算法的思想.实现方式以及效率分析.最后比较各种算法的优劣性和稳定性. 1 排序的概念及应用 1.1 排 ...
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...
- 数据结构与算法-栈与队列
数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...
- 数据结构与算法(C语言) | 栈和队列——栈(自己做过测试)
栈是一种重要的线性结构,通常称,栈和队列是限定插入和删除只能在表的"端点"进行的线性表.(后进先出) –栈的元素必须"后进先出". –栈的操作只能在这个线性表的 ...
最新文章
- pip 升级之后提示 bash: /usr/bin/pip3: No such file or directory
- for android 软件,安卓特工 for Android
- fatal error C1189: #error : Building MFC application with /MD[d]
- php多线程安装pthreads步骤详解
- 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
- leetcode 1720. 解码异或后的数组(位运算)
- 情绪调节的自适应_如何做好情绪的管理者
- KMP算法 串模式识别 用nextval[j]改进next[j]
- C++效率在此笔者不想通过反汇编来实验
- 面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现
- 为什么一定要重视隐式反馈?
- conn.setAutoCommit(true) and conn.close() 关系
- setitime和相关函数
- 【JAVA视频压缩】-------轻量级视频压缩组件JAVE
- 转载《由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断》的解决方案
- DOM Scripting 学习六 - Image Gallery
- python 函数名大小写
- 总是在崩溃的边缘徘徊,可能这就是成年人的生活吧!!!!
- docker删除镜像及容器
- 图书推荐:《Web前端黑客技术揭秘》
热门文章
- Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
- 解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)
- python免费下载及安装_Python的下载及安装
- android 服务端 导入工程,如何导入与配置从网上下载的android源代码及服务器端源代码...
- linux 脚本 java_Linux 通过脚本执行Java程序
- 服务器网盘系统怎么装,云服务器上怎么安装操作系统
- python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...
- linux中python安装_linux环境下的python安装过程图解(含setuptools)
- python能开发什么产品_三周学 Python ?不,三周做个产品
- 数据库查找姓李的人_最通俗易懂的理解什么是数据库