C语言栈实现及十进制转八进制应用
C语言栈实现及十进制转八进制应用
本文将介绍如何使用C语言实现栈这种数据结构,并利用它来解决实际问题——将十进制数转换为八进制数。
1. 栈的定义和基本操作
栈是一种遵循**后进先出(LIFO)**原则的数据结构。我们可以把它想象成一个桶,只能从一端放入和取出元素,最后放进去的元素会最先被取出来。
下面是用C语言实现的顺序栈结构体SqStack以及其基本操作函数:c#include <stdio.h>#include <malloc.h>#include <stdlib.h>
#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2
typedef int SElemType;typedef int Status;
#define STACK_INIT_SIZE 100 #define STRCKINCREMENT 10
typedef struct { SElemType *base; // 栈底指针 SElemType *top; // 栈顶指针 int stacksize; // 栈的当前容量} SqStack;
// 初始化栈Status InitStack(SqStack &S) { S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if (!S.base) exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;}
// 获取栈顶元素Status GetTop(SqStack S, SElemType &e) { if (S.top == S.base) return ERROR; 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, (S.stacksize + STRCKINCREMENT) * sizeof(SElemType)); if (!S.base) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STRCKINCREMENT; } *S.top++ = e; return OK;}
// 出栈Status Pop(SqStack &S, SElemType &e) { if (S.top == S.base) return ERROR; e = *--S.top; return OK; }
// 判断栈是否为空Status StackEmpty(SqStack S) { if (S.top == S.base) return TRUE; else return FALSE;}
代码解释:
SElemType定义了栈中元素的数据类型,可以根据需要修改。-SqStack结构体包含三个成员:base指向栈底,top指向栈顶,stacksize记录栈的容量。-InitStack函数初始化一个空栈,分配内存并设置初始容量。-GetTop函数获取栈顶元素的值,但不改变栈结构。-Push函数将元素e入栈,如果栈满则动态扩容。-Pop函数将栈顶元素出栈,并用e返回其值。-StackEmpty函数判断栈是否为空。
2. 十进制转八进制
利用栈可以方便地实现十进制到八进制的转换。算法思路如下:
- 输入一个十进制整数
N。2. 循环执行以下操作,直到N变为 0: * 计算N除以 8 的余数r,将r入栈。 * 将N更新为N除以 8 的商。3. 循环执行以下操作,直到栈为空: * 将栈顶元素出栈,输出该元素。cvoid conversion() { SqStack S; int N; SElemType e; InitStack(S); scanf('%d', &N); while (N) { Push(S, N % 8); N = N / 8; } printf('转换成八进制后的数为:'); while (!StackEmpty(S)) { Pop(S, e); printf('%d', e); } printf(' ');}
代码解释:
- 函数
conversion实现了十进制到八进制的转换。- 首先初始化一个空栈S。- 然后读取用户输入的十进制整数N。- 利用循环将N转换为八进制数,并将每一位依次入栈。- 最后再将栈中元素依次出栈并输出,即可得到转换后的八进制数。
3. 完整代码示例c#include <stdio.h>#include <malloc.h>#include <stdlib.h>
// ... (栈的定义和操作函数,与上面代码一致) ...
int main() { SqStack S; SElemType e, x; InitStack(S); Push(S, 5); Push(S, 4); Push(S, 3); Push(S, 2); Push(S, 1); GetTop(S, e); printf('栈顶元素为%d ', e); printf(' '); Pop(S, x); printf('删除的栈顶元素为%d ', x); printf(' '); printf('输入一个十进制数:'); conversion(); return 0;}
运行结果:
栈顶元素为1
删除的栈顶元素为1
输入一个十进制数:1234转换成八进制后的数为:2322
总结
本文介绍了C语言栈的实现以及如何利用栈实现十进制到八进制的转换。栈作为一种基础的数据结构,在计算机科学中有着广泛的应用。掌握栈的概念和操作方法对于学习数据结构和算法至关重要。
原文地址: https://www.cveoy.top/t/topic/NO0 著作权归作者所有。请勿转载和采集!