C语言实现顺序栈基本操作

  • 基本操作
    • 顺序栈储存结构
    • 初始化顺序栈
    • 判断顺序栈是否为空
    • 顺序栈的长度
    • 清空顺序栈
    • 销毁顺序栈
    • 压栈n个元素
    • 入栈
    • 出栈
    • 遍历
    • 测试代码整合

基本操作

顺序栈储存结构

//定义顺序栈存储结构
typedef struct
{int *top;  //栈顶指针 int *base;   //栈底指针 int stacksize;    //顺序栈最大容量
} SqStack;

初始化顺序栈

//初始化顺序栈
Status InitStack(SqStack *s)
{(*s).base = (SElemType *)malloc(MAXSIZE);   //动态创建一个内存空间单元,容量为MAXSIZE if(!(*s).base) return ERROR;   //动态创建空间单元失败返回ERROR (*s).top = (*s).base;    //栈顶指针指向栈底指针 (*s).stacksize = MAXSIZE;     return OK;
}

判断顺序栈是否为空

//判断顺序栈是否为空
Status isEmpty(SqStack s)
{if(s.base == s.top) return TRUE;   //栈顶和栈底相同  空 return FALSE;   //非空
}

顺序栈的长度

//求顺序栈长度
int StackLength(SqStack s)
{return s.top-s.base;    //栈顶指针减去栈底指针
}

清空顺序栈

//清空顺序栈
Status clearStack(SqStack *s)
{if((*s).base == NULL) return ERROR;    //顺序栈不存在返回ERROR (*s).top = (*s).base;     //栈顶指针指向栈底 return OK;
}

销毁顺序栈

//销毁顺序栈
Status destroyStack(SqStack *s)
{if((*s).base == NULL) return ERROR;free((*s).base);   //释放栈底指针所指向的内存单元 (*s).stacksize = 0;      //顺序栈最大容量设置为0 (*s).base = (*s).top = NULL;    //栈底和栈顶都设置NULL return OK;
}

压栈n个元素

//为顺序栈 压栈n个元素
Status pushElems(SqStack *s,int n)
{int i;if((*s).base == NULL) return ERROR;   //顺序栈不存在返回ERROR if(((*s).top - (*s).base) == (*s).stacksize) return ERROR;    //顺序栈满栈返回ERROR printf("请输入压栈的%d个元素: ",n);for(i=0;i<n;i++){scanf("%d",(*s).top);        //栈顶指针指向的内存单元输入数据 (*s).top++;       //栈顶指针指向下一个栈 }return OK;
}

入栈

//入栈
Status push(SqStack *s,SElemType e)
{if((*s).base == (*s).MAXSIZE) return ERROR; *((*s).top)++=e;  //栈顶指针先赋值自加 return OK;}

出栈

 //出栈
Status pop(SqStack *s,SElemType *e)
{if((*s).base == (*s).top) return ERROR;*e = *-- (*s).top;   //栈顶指针先自减再取值,最后赋值 return OK;
}

遍历

//遍历
void show(SqStack s)
{printf("当前顺序栈情况: ");for(s.top = s.top-1;s.top>=s.base;s.top--)printf("%d ",*(s.top));printf("\n"); }

测试代码整合

#include <stdio.h>
#include <stdlib.h>#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100typedef int SElemType;
typedef int Status;
//定义顺序栈存储结构
typedef struct
{int *top;  //栈顶指针 int *base;   //栈底指针 int stacksize;    //顺序栈最大容量
} SqStack;//初始化顺序栈
Status InitStack(SqStack *s)
{(*s).base = (SElemType *)malloc(MAXSIZE);   //动态创建一个内存空间单元,容量为MAXSIZE if(!(*s).base) return ERROR;   //动态创建空间单元失败返回ERROR (*s).top = (*s).base;    //栈顶指针指向栈底指针 (*s).stacksize = MAXSIZE;     return OK;
}//为顺序栈 压栈n个元素
Status pushElems(SqStack *s,int n)
{int i;if((*s).base == NULL) return ERROR;   //顺序栈不存在返回ERROR if(((*s).top - (*s).base) == (*s).stacksize) return ERROR;    //顺序栈满栈返回ERROR printf("请输入压栈的%d个元素: ",n);for(i=0;i<n;i++){scanf("%d",(*s).top);        //栈顶指针指向的内存单元输入数据 (*s).top++;       //栈顶指针指向下一个栈 }return OK;
} //判断顺序栈是否为空
Status isEmpty(SqStack s)
{if(s.base == s.top) return TRUE;   //栈顶和栈底相同  空 return FALSE;   //非空
}//清空顺序栈
Status clearStack(SqStack *s)
{if((*s).base == NULL) return ERROR;    //顺序栈不存在返回ERROR (*s).top = (*s).base;     //栈顶指针指向栈底 return OK;
} //销毁顺序栈
Status destroyStack(SqStack *s)
{if((*s).base == NULL) return ERROR;free((*s).base);   //释放栈底指针所指向的内存单元 (*s).stacksize = 0;      //顺序栈最大容量设置为0 (*s).base = (*s).top = NULL;    //栈底和栈顶都设置NULL return OK;
}//求顺序栈长度
int StackLength(SqStack s)
{return s.top-s.base;    //栈顶指针减去栈底指针
}//入栈
Status push(SqStack *s,SElemType e)
{if((*s).base == (*s).MAXSIZE) return ERROR; *((*s).top)++=e;  //栈顶指针先赋值自加 return OK;} //出栈
Status pop(SqStack *s,SElemType *e)
{if((*s).base == (*s).top) return ERROR;*e = *-- (*s).top;   //栈顶指针先自减再取值,最后赋值 return OK;
}//遍历
void show(SqStack s)
{printf("当前顺序栈情况: ");for(s.top = s.top-1;s.top>=s.base;s.top--)printf("%d ",*(s.top));printf("\n"); } int main()
{SqStack S;SElemType e;InitStack(&S);printf("-------为初始化的栈压入数据-------\n"); pushElems(&S,5);show(S);printf("\n-------顺序栈是否为空?---------\n");if(isEmpty(S)) printf("空栈\n");else printf("非空栈\n");  printf("\n-------顺序栈的长度--------\n顺序栈的长度:%d\n",StackLength(S));printf("\n-------顺序栈入栈-----------\n");push(&S,10); show(S);printf("\n-------顺序栈出栈-----------\n");pop(&S,&e);printf("出栈元素:%d\n",e);show(S);printf("\n-------清空顺序栈----------\n");clearStack(&S); if(isEmpty(S)) printf("空栈\n");else printf("非空栈\n"); printf("\n-------销毁顺序栈----------\n");destroyStack(&S);if(!S.base) printf("栈不存在~\n");
}

【数据结构-栈】C语言实现顺序栈基本操作相关推荐

  1. c语言栈的实现以及操作_C++语言实现顺序栈

    在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以看看之前的文章,下面是链接C语言实现顺序栈在这 ...

  2. 【数据结构】栈:Java实现顺序栈栈应用浅析

    1.栈是什么 定义:后进者先出,先进者后出,这就是典型的"栈"结构 操作特性:栈是一种"操作受限"的线性表,只允许在一端插入和删除数据. 使用场景:当某个数据集 ...

  3. C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)

    //顺序栈的基本操作 #include<stdio.h> #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct ...

  4. (王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作

    文章目录 一:栈基本概念 (1)栈的定义 (2)压栈和出栈 (3)进栈出栈变化形式 (4)栈的操作 二:栈的顺序存储结构及其操作实现 (1)顺序栈的定义 (2)进栈 (3)出栈 (4)读取栈顶元素 ( ...

  5. 数据结构(C语言版)顺序栈相关算法的代码实现

    这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...

  6. 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)

    1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...

  7. 数据结构(C语言版)——顺序栈(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 10 #define OK 1 #define ERROR ...

  8. 数据结构(java语言描述)顺序栈的使用

    1.声明Istack接口: package stack; public interface Istack {     public void clear();     public boolean i ...

  9. 实现顺序栈的各种基本运算的算法C语言,实现顺序栈的各种基本运算的算法

    试编写一个算法,让两个顺序栈共用一个数组stack[N]试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像 ...

  10. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

最新文章

  1. sshd服务java教程_Windows下安装OpenSSH服务教程
  2. PHP 如何获取二维数组中某个key的集合(高性能查找)
  3. sublime 设置自动更新_不止是自动更新!简单几步让Windows 10变听话的孩子
  4. PhpStorm代码换行设置
  5. 关于 resgen.exe已退出 代码为 2 的错误问题的解决办法。
  6. date比较大小 mybatis_MyBatis Sqlserver日期比较
  7. 你真的知道Java同步锁何时释放?
  8. mysql 时间绝对值_datetime和timestamp--时间戳是绝对值,日期是相对值
  9. kubernetes pv-controller 解析
  10. (22)Verilog HDL结构:function语句
  11. RabbitMQ的三大交换器详解
  12. 惊慌 Android!使用 3D 打印的头像可破解多款手机
  13. select下拉框带模糊查询_从零学会SQL:简单查询 -第二节
  14. 中兴新支点国产操作系统下载安装WPS办公软件,好用无广告
  15. Programming Languages PartB Week2学习笔记——用Racket编写解释器
  16. (建议收藏) | Spring Boot集成JSON Web Token(JWT)【知识积累】
  17. python色卡识别_用Python帮小姐姐选口红,人人都是李佳琦
  18. FinalShell连接不上LinuxCentOS-7的解决方案
  19. 【Lerna 基本使用】
  20. 打造金融科技新生态,巨杉数据库与宇信科技完成产品兼容互认证

热门文章

  1. 硬盘保护卡(增霸卡)的工作原理
  2. 固高GTS运动控制卡,C#语言三轴点胶机样本程序源代码
  3. 闽院食堂管理系统分析
  4. 计算机房装修对门的要求,机房建设标准要求
  5. SpringCloud Greenwich版本集成OAuth2.0
  6. vue加载中图片和加载失败图片的占位图
  7. 4.PCIe协议分析2-PIO XAPP1052 XDMA三者联系和区别详谈
  8. pdf转换html乱码怎么办,pdf转word后乱码怎么办?
  9. 数学建模竞赛常考三大模型及十大算法【预测模型、优化模型、评价模型】
  10. SQL经典练习题及答案