线性结构——栈
发布日期:2021-07-17 15:49:29
浏览次数:3
分类:技术文章
本文共 2848 字,大约阅读时间需要 9 分钟。
栈是只能在表尾进行插入或删除操作的线性表,栈既然也是线性表,那么它也有顺序存储结构和链式存储结构两种表示方法,一般它被表示为顺序存储结构。
十进制正整数转换为二进制
/* * 十进制正整数转换为二进制 */void convert(SqStack S, int number){ int temp; while(number) { temp = number & 1; //相当于number % 2 Push(&S, temp); number = number >> 1; }}顺序存储结构的代码实现如下:
#include#include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define INIT_SIZE 20#define INCREMENT_SIZE 5typedef int SElemType;typedef int Status;/* *存储结构 */typedef struct{ SElemType *base; //栈尾指针 SElemType *top; //栈顶指针 int size;}SqStack;/* * 初始化栈 */Status InitStack(SqStack *S){ S->base = (SElemType*) malloc(INIT_SIZE * sizeof(SElemType)); if(!S->base) { exit(OVERFLOW); } S->top = S->base; S->size = INIT_SIZE; return OK;}/* * 清空栈 */Status ClearStack(SqStack *S){ S->top = S->base; return OK;}/* * 摧毁栈 */Status DestroyStack(SqStack *S){ free(S->base); S->base = NULL; S->top = NULL; S->size = 0; return OK;}/* * 判断栈是否为空 */Status IsEmpty(SqStack S){ if(S.top == S.base) return TRUE; else return FALSE;}/* * 获取栈的长度 */int GetLength(SqStack S){ return S.top - S.base;}/* * 获取栈顶元素 */Status GetTop(SqStack S, SElemType *e){ if(S.top > S.base) { *e = *(S.top--); return OK; } else { return ERROR; }}/* * 压栈 */Status Push(SqStack *S, SElemType e){ if((S->top - S->base) / sizeof(SElemType) >= S->size) { S->base = (SElemType*)realloc(S->base, (S->size + INCREMENT_SIZE) * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base + S->size; S->size += INCREMENT_SIZE; } *S->top = e; S->top++; return OK;}/* * 退栈 */Status Pop(SqStack *S, SElemType *e){ if(S->top == S->base) return ERROR; S->top--; *e = *S->top; return OK;}/* * 访问元素 */void visit(SElemType e){ printf("%d", e);}/* * 遍历栈 */Status TraverseStack(SqStack S, void (*visit)(SElemType)){ while(S.top > S.base) { visit(*S.base); S.base++; } return OK;}/* * 十进制正整数转换为二进制 */void convert(SqStack S, int number){ int temp; while(number) { temp = number & 1; //相当于number % 2 Push(&S, temp); number = number >> 1; }}int main(){ SqStack S; SElemType e; int i; if(InitStack(&S)) { printf("init_success\n"); } if(IsEmpty(S)) { printf("Stack is empty\n"); } for(i = 0; i < 10; i++) { Push(&S, i); } GetTop(S, &e); printf("The first element is %d\n", e); printf("length is %d\n", GetLength(S)); Pop(&S, &e); printf("Pop element is %d\n", e); ClearStack(&S); convert(S, 10); TraverseStack(S, *visit); if(DestroyStack(&S)) { printf("\ndestroy_success\n"); } return 0;}
转载地址:https://blog.csdn.net/huzhiyuan0000000/article/details/75174663 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月29日 00时52分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【第二期】那些设计漂亮、有创意的电路板!
2019-04-29
【第三期】那些设计漂亮、有创意的电路板!
2019-04-29
「第二篇」全国一等奖,经验帖。
2019-04-29
「第三篇」全国电子设计竞赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载...
2019-04-29
5G小科普(漫画版,So easy!)
2019-04-29
无人再提华强北
2019-04-29
千万不要小瞧那些不好好写代码的程序员
2019-04-29
80后,天才程序员, Facebook 第一任 CTO,看看开挂的人生到底有多变态?
2019-04-29
「第四篇」电赛控制题可以准备一些什么?
2019-04-29
「第五篇」全国电子设计竞赛-电源题设计方案总结
2019-04-29
「第六篇」对于电赛,我们应该看重什么?
2019-04-29
树莓派翻车了
2019-04-29
垃圾分类背后的数据和真相
2019-04-29
PID算法搞不懂?看这篇文章就够了。
2019-04-29
这位电子工程师,你不能错过。
2019-04-29
十八般武艺教你如何解决问题
2019-04-29
「权威发布」2019年大学生电子设计竞赛,仪器设备和主要元器件清单
2019-04-29
「重磅猜题之第二篇」2019年大学生电子设计竞赛
2019-04-29
知乎:硬件和软件哪个吃香?
2019-04-29
中国深圳,600架无人机的盛典!
2019-04-29