数据结构--顺序栈

栈:限定仅在表尾进行插入或删除操作的线性表,对栈来说,表尾端为栈顶,表头端为栈底。

本文实现了顺序栈的表示和相关函数操作,以及一些验证性代码。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0typedef int Status;
typedef int SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;
}SqStack;Status Init_Stack(SqStack &S){S.base=(SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);if(!S.base){printf("Merry Error\n");exit(0);}S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;
}Status Clear_Stack(SqStack &S){S.top=S.base;return OK;
}Status Stack_Empty(SqStack S){if(S.top==S.base){return TRUE;}else{return FALSE;}
}int Stack_Length(SqStack S){int length=0;while(S.base!=S.top){S.top--;length++;}return length;
} Status Get_Top(SqStack S,SElemType &e){if(S.base==S.top){return ERROR;}else{e=*(S.top-1);return OK;}
}Status Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){S.base=(SElemType *)realloc(S.base,sizeof(SElemType)*(S.stacksize+STACKINCREMENT));if(!S.base){printf("Merroy Error!\n");exit(0);}}S.stacksize+=STACKINCREMENT;*S.top++=e;return OK;
}Status Pop(SqStack &S,SElemType &e){if(S.base==S.top){return ERROR;}e=*(--S.top);return OK;
}Status Destroy_Stack(SqStack &S){S.top=S.base;free(S.base);return OK;
}int main(){SqStack S;int e;int choice;if(Init_Stack(S)){printf("Init Stack OK!\n");}while(1){printf("选择要进行的操作:\n");printf("1、压栈     2、出栈\n");printf("3、取栈顶   4、栈长度\n");printf("5、清空栈   6、销毁栈\n");scanf("%d",&choice);switch(choice){case 1:printf("要压栈的数据:");scanf("%d",&e);Push(S,e);break;case 2:if(Pop(S,e)){printf("出栈的数据为:%d\n",e);}else{printf("空栈,出栈失败!\n");}break;case 3:if(Get_Top(S,e)){printf("栈顶元素为:%d\n",e);}else{printf("空栈,出栈失败!\n");}break;case 4:printf("栈长度为:%d\n",Stack_Length(S));break;case 5:Clear_Stack(S);break;case 6:Destroy_Stack(S);printf("栈已销毁!退出程序中\n");Sleep(1000); exit(0);default:break;}}return 0;
} 

欢迎留言交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 的一些基本用法

一、增加字段 alter table students add IsImportJcxx int set default 0 COMMENT 是否导入基础信息平台 1 是导入; 二、删除字段 alter table provincestudentinfo drop column NativePlace; 三、创建表 CREATE TABLE 表名 ( IconId int not null auto_increment, 字段名 …

Python 文件的输入与输出

1. 文本文件的读写主要通过open()所构建的文件对象来实现。我们打开一个文件&#xff0c;并使用一个对象来表示该文件 , f open(d&#xff0c;r) 其中d是文件名&#xff0c;r是模式 "r" 文件只读,使用 f.write()会报错 "w" 用于写入&#xff0c;每次使用f…

查询表的内容

1&#xff1a;as给表另外命名 2&#xff1a;desc倒序 3&#xff1a;order by分组 4&#xff1a;select*form表名where条件转载于:https://www.cnblogs.com/chen1101465910/p/3719944.html

人之为生也&#xff0c;凡不破者亦难立之。纵所思之&#xff0c;生而顺之者&#xff0c;亦难成也。然吾之路也&#xff0c;亦难行之&#xff0c;至此二十有余&#xff0c;虽无半百之所历&#xff0c;亦无顺途&#xff0c;每及思之&#xff0c;慨之多也。 偶有所感&#xff0c;念…

Delphi 一些函数解释

AdjustWindowRect 给定一种窗口样式&#xff0c;计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 AttachThreadInput 连接线程输入函数 BeginDeferWindowPos 启动构建一系列新窗口位置的过…

盒子模型的总结

转载于:https://www.cnblogs.com/zy2012/p/3725677.html

ubuntu node.js Binaries方式安装(二进制文件安装)

node.js在windows下有安装文件&#xff0c;直接一路下一步就可以了&#xff0c;但大家都知道在windows下用node.js总会遇到一些问题&#xff0c;所以就会用到linux。 看到网上几乎是在linux下编译安装node.js。感觉很奇怪&#xff0c;其实官网直接有 node.js linux binaries文…

maven generating project in batch mode hang

现象&#xff1a; 执行 archetype:generate 的时候&#xff0c;会产生[INFO] Generating project in Batch mode原因是&#xff1a;网速问题&#xff0c; 解决方法&#xff1a; 设置maven不要从远程服务器上获取catalog&#xff0c;增加参数-DarchetypeCataloginternal 如何在i…

android手机生成pdf格式文件,Android根据pdf模板生成pdf文件

1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat 3 new android.icu.text.SimpleDateFormat("HHmmss");//HH:mm:ss4 //设置默认时区5 simpleDateFormat.setTimeZone(android.icu.util.TimeZone.getTimeZone("G…

栈的应用--数制转换

十进制N和其他d进制 N(N div d)XdN mod d &#xff08;其中&#xff1a;div为整除运算&#xff0c;mod为求余运算&#xff09; void conversion(){SqStack S;int N;SElemType e;Init_Stack(S);scanf("%d",&N);while(N){Push(S,N%8);NN/8;}while(!Stack_Empty(S…

radio按钮点击文字选中按钮

<input type"radio" name"name" id"rd" value" " /><label for"rd">测试</label> 转载于:https://www.cnblogs.com/kevin1988/p/3727041.html

tokumx经营报表

#见数据库列表 show dbs#切换/创建数据库(当创建一个集合(table)的时候会自己主动创建当前数据库)use admin;#添加用户 db.addUser("zhoulf ","123456",true)#更改password&#xff08;为已经存在的用户更改password&#xff09; db.addUser("zhoulf …

微博 Android 启动广告,使用Xposed去除微博国际版的启动广告

本文同步更新于旺仔的个人博客&#xff0c;访问可能有点慢&#xff0c;多刷新几次。前面有篇文章已经介绍了如何创建Xposed模块的文章了&#xff0c;这篇就让我们来实现一个简单的去除启动广告的功能吧。起因为什么要是要去掉微博国际版的开屏广告呢&#xff0c;因为广告烦人啊…

鸽巢原理

鸽巢原理&#xff1a; n1个鸽子放入n个窝中&#xff0c;至少有一个窝含有两只鸽子 Find a multipleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5590 Accepted: 2434 Special JudgeDescription The input contains N natural (i.e. positive integer) numbers…

linux命令:vim文件操作命令、新建用户,查看用户列表,chown命令

命令 简单说明 :w 保存编辑后的文件内容&#xff0c;但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。 :w! 强制写文件&#xff0c;即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件&#xff0c;例如&#xff0c;原有的文件…

cocos2d-x android 环境搭配,cocos2d-x Android环境配置问题和解决方法

1.前提&#xff1a;下载安装Cygwin,并已经在cygwin\home\admin(计算机用户名)下的.bash_profile中完成如下配置&#xff1a;NDK_ROOT /cygdrive/d/cocos2dxdev/andrid-ndk-r8e//NDK安装位置export NDK_ROOT问题&#xff1a;运行cygwin.exe.录入如下的第一行数据后&#xff0c;没…

jQuery 1.9 移除了 $.browser 的替代方法

授权方式&#xff1a;署名&#xff0c;非商业用途&#xff0c;保持一致&#xff0c;转载时请务必以超链接(http://www.fwolf.com/blog/post/35)的形式标明文章原始出处和作者信息及本声明。 jQuery 从 1.9 版开始&#xff0c;移除了 $.browser 和 $.browser.version &#xff0…

基于QTcpSocket和QTcpServer的Tcp通讯以及QDataStream序列化数据

最近要在QT下开发Tcp通讯&#xff0c;发送序列化数据以便于接收。 这里涉及到几个问题&#xff1a; 1.QTcpSocket、QTcpServer的通讯 2.QDataStream序列化数据 多的不说&#xff0c;直接上干货&#xff01;&#xff01;&#xff01; 客户端&#xff1a; tcpclient.h 1 #ifndef …

android mina分析,Android与Mina整合

最近想在自己做的安卓手机应用中加入即时聊天功能&#xff0c;于是想到了用Mina来实现&#xff0c;也是由于自己想着偷懒&#xff0c;借用了官方的example中chat的相关代码&#xff0c;经过一番改造&#xff0c;很快就能在java环境中正常运行了。确认没问题后&#xff0c;将cli…

栈的应用--括号匹配的检验

算法中设置一个栈&#xff0c;每次读入一个括号&#xff0c;若是右括号&#xff0c;则或者与置于栈顶的括号匹配&#xff0c;或者是不合法的情况&#xff0c;若是左括号&#xff0c;则入栈。若算法结束&#xff0c;栈是空的&#xff0c;则括号合法。 括号匹配函数 Status bra…