线性结构——栈
发布日期: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秒