栈的定义:栈是仅限在表尾进行插入和删除的线性表允许进行插入和删除的一端被称为栈顶另一端被称为栈底,插入被称为进栈或入栈,删除被称为出栈或退栈。

栈的特点:先进后出


栈的基本算法
1.进栈
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

栈的分类:栈分顺序栈和链式栈

顺序栈的实现
代码如下:
head.h部分

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define maxsize 30typedef struct node
{int * base;int * top;int stacksize;
}Sqstack;void InitStack(Sqstack *S);
void Push(Sqstack *S,int elem);
int  Pop(Sqstack *S);

operation.c部分:

#include"head.h"void InitStack(Sqstack *S) //初始化栈
{S->base = (int *)malloc(sizeof(int)*maxsize);//给栈分配数组空间if(!S->base)exit(0);S->top=S->base;S->stacksize=maxsize;
}
void Push(Sqstack *S,int elem)//入栈
{*S->top++=elem;  //元素先入栈,指针后加一}
int Pop(Sqstack *S)
{int elem ;elem=*--S->top; //栈顶指针先减一,再将栈顶元素出栈return elem;
}
//这里使用指针来返回函数值更为方便
/*void Pop(Sqstack *S,int*elem)
{*elem=*--S->top; //栈顶指针先减一,再将栈顶元素出栈
}
*/

main.c

#include"head.h"int main()
{Sqstack S;int d,i,a,b;InitStack(&S);printf("请输入一个数:\n");scanf("%d",&d);while(!a==0){a=d/2;b=d-a*2;      //取余数确定栈底元素d=a;Push(&S,b);   //元素入栈}printf("转化为二进制为:\n");while(S.top!=S.base){i= Pop(&S);  /*Pop(&S,&i)*/printf("%d",i);}printf("\n");
}

链栈代码:
head.h

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define ERROR -1//定义数据结点类型
typedef struct Node{int data;struct Node*next;
} LNode,*LinkStack;int push(LinkStack S,int element);
int pop(LinkStack S);

operation.c

#include"head.h"int push(LinkStack S,int element){LNode *p;p= (LNode*)malloc(sizeof(LNode));p->data=element;p->next=S->next;S->next=p;return element;
}
int pop(LinkStack S){int e;LinkStack p;p=S->next;if (S==NULL) return ERROR;e=p->data;                      //栈顶元素赋给eS->next=p->next;                //栈顶指针下移free(p);return e;
}

main函数

#include"head.h"int main()
{LinkStack S;S= (LNode*)malloc(sizeof(LNode));S->next = NULL;int i,k,a,f,h,j;printf( "输入入栈元素个数:\n" );scanf("%d",&k);for ( i = 0; i < k; i++){printf("请输入元素:\n");scanf("%d",&a);push(S,a);}printf( "--------------------\n" );printf("输入出栈元素个数:\n" );scanf("%d",&f);printf("元素出栈\n");for ( h= 0; h< f; h++){j=pop(S);printf("%d",j);}printf("\n");return 0;
}

c语言栈的实现和表示相关推荐

  1. 饿了么交付中心语言栈转型总结

    Photo @NeONBRAN 文 | 李杰 前言: 本文介绍了饿了么交付中心由 Python 语言栈转换到 Java 语言栈大致过程,一来是对前段时间的工作做下总结,另外也是想通过此次总结为其他应用 ...

  2. c语言栈训练题目:括号匹配

    c语言栈训练题目:括号匹配 基本思路: 当前字符不是括号,不做处理: 当前字符是左括号,则进栈: 当前字符是右括号:若栈空,则表明该"右括号"多余,不匹 配,结束:否则和栈顶元素比 ...

  3. C语言栈的用法(创建、入栈、出栈、遍历)

    C语言栈的用法(创建.入栈.出栈.遍历) 本篇博客主要简单介绍如何使用C语言构建栈,元素入栈,元素出栈以及遍历所有的栈内元素 1.栈的定义 首先对栈进行定义,构建一个简单的结构体,采用typedef ...

  4. c语言怎样计算栈的长度,C语言 栈的表示和实现详细介绍

    C语言 栈的表示和实现详细介绍 定义:栈是限定仅在表尾进行插入和删除操作的线性表. 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入 ...

  5. C语言栈顺序存储的数据结构

    typedef int SElemType ; typedef struct{SElemType data [ MAXSIZE ];int top ; } SqStack , * SqtackPtr ...

  6. 百融榕树使用非Java语言栈,百融榕树具有明显优势

    百融榕树Service Mesh架构出现之前,由于相同的语言栈有明显的协同优势,这显然会导致研发团队在选择语言栈时会有所顾虑,甚至不是按照适用的场景选择语言,比如百融榕树S初创团队一开始选择使用了Ja ...

  7. C语言栈实现十进制转二进制

    C语言栈实现十进制转二进制 利用栈的先进后出的性质,与十进制转二进制时的2除法相似 (先算的余数放在后位) #include <stdio.h> #include <stdlib.h ...

  8. c语言限流,C语言—栈

    栈的操作:进栈和出栈 #include "stdafx.h" #include "stack.h" #define maxsize 20 typedef int ...

  9. c语言 栈结构存放数据类型,数据结构——栈的详解

    栈和队列是两种重要的线性结构,从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表的子集.他们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,他们是和线 ...

  10. c 语言栈,C语言栈

    C语言实现简单的栈结构 今天看到一个问题是要交换两个变量的值并且不能使用中间变量,首先想到的方法就是用数学的方法: int a = 10,b = 12; a = a + b; // 求和 b = a ...

最新文章

  1. 我的软考之路(九)——总结篇
  2. burpsuite 设置https_新手教程:如何使用Burpsuite抓取手机APP的HTTPS数据
  3. Debug不崩溃Release版本崩溃的一种原因
  4. python dump函数_python 处理 json 四个函数dumps、loads、dump、load的区别
  5. 稀疏自编码器符号一览表
  6. 推荐系统论文DSIN:Deep Session Interest Network
  7. 保护眼睛的电脑设置_电脑文件加密怎么设置?一键快速保护重要文件
  8. //监测网络状态(AFNetworking) 服务端 客户端
  9. 嵌入式系统——软件知识产权
  10. 13幅逻辑图,领略杜克大学的经典思维
  11. 在ASP.NET中自动给URL加上超级链接
  12. asp.net gridview 为什么只显示一行数据_为什么中位数(大多数时候)比平均值好
  13. 98 服务器系统,流金岁月:重温Windows 98视窗操作系统
  14. QGIS Server安装教程
  15. Common Electrical I/O (CEI)
  16. 深度学习图像处理(色彩编辑4)
  17. DeepMind 联合创始人加盟 Google AI【智能快讯】
  18. 华为鸿蒙系统操作教程_鸿蒙OS Beta版怎么使用
  19. 如何从程序员升级到架构师?
  20. C#实现格式转换:wmf转png

热门文章

  1. 【python】 输出换行字符 “\n“
  2. Python找出所有的水仙花数
  3. HRNet语义分割训练及TensorRT部署
  4. PYTHON对接国际验证码接口
  5. Vmware Ubuntu虚拟机磁盘扩容(非常简单)
  6. 手把手教你批量收藏宗介和波妞壁纸
  7. 蓝牙路由器蓝牙点对多点组网蓝牙远程控制
  8. Spring之面向切面编程AOP(八)
  9. 转战物联网·基础篇12-了解物联网之物连接相关通信技术(1)
  10. matlab axis坐标轴相关设置详解