栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈的应用以及进制转换代码实现(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈的应用以及进制转换代码实现(C语言)

一.栈的基本操作和应用代码实现

栈的详解:数据结构——栈_慢慢~漫漫的博客-CSDN博客

#include
#include
#define stack_init_size 10
#define STACKSIZE 10




//定义栈结构
typedef struct
{
    int *base; //栈底
    int *top;  //栈顶
    int stacksize;  //栈的内存
}SqStack;




//初始化栈
void InitStack(SqStack * s)
{
    s -> base = (int *)malloc (stack_init_size * sizeof(int)); //动态开辟空间给栈
    if(!s->base)
        exit(0);
    s->top = s->base;
    s->stacksize = stack_init_size;


}




//压栈
void Push(SqStack * s , int e)
{
    if(s->top - s->base == s->stacksize)
    {
        //如果栈的内存不够,就为它扩容
        s->base = (int *) realloc(s->base,(s->stacksize + STACKSIZE)*sizeof(int));
        if(!s->base)
            exit(0);
        s->top = s->base + s->stacksize;//扩容后的新栈顶
        s->stacksize+=STACKSIZE;//扩容后的新空间
    }
    *s -> top = e;
    s -> top++;
}




//出栈
int Pop(SqStack * s)
{
    int e;
    if(s->top == s->base)
    {
        printf("栈已空!n");
        exit(0);
    }
    s -> top--;
    e = *s->top;
    return e;
}


//判断栈是否为空
int EmptyStack(SqStack s)
{
    if(s.top == s.base)
        return 1;
    else
        return 0;
}


//置空栈
void ClearStack(SqStack * s)
{
    s -> top = s -> base;
}


//打印栈
void PrintStack(SqStack s)
{
    while(!EmptyStack(s)) //这里相当于while(EmptyStack(s) == 0),根据Empty函数,当等于0的时候,说明栈不空
    {
        s.top--;
        printf("%d  ",*s.top);
    }
    printf("nn");
}


//进制转化函数
void conversion(int N , int d)
{
    SqStack M;
    InitStack(&M);
    printf("你输入的数值%d转换成%d进制后为: ",N,d);
    while(N)
    {
        Push(&M,N%d); //取余数,压入栈中
        N = N/d;      //取除数
    }
    while(!EmptyStack(M))
    {
        PrintStack(M); //打印栈
        break;
    }
    printf("n");
}


//主函数
int main()
{
    SqStack M;
    int x,y,c,i,j;
    InitStack(&M);
	printf("—栈已初始化—nn");
	printf("请输入你要进行的操作:n");
   	printf("********************************");
	printf("n*****1.入栈       2.出栈****n");
	printf("*****3.进制转化   4.退出****n");
	printf("********************************nn"); //这里是个小菜单
	scanf("%d", &x);
    while(x!=0)
    {
        switch(x)
        {
        case 1:printf("请输入要入栈的数值: n");
            scanf("%d",&y);
            Push(&M,y);
            PrintStack(M);
            break;
        case 2:printf("出栈的数值为: ");
            c = Pop(&M);
            printf("%dn",c);  //栈中弹出来的数给c。再把c打印一下
            PrintStack(M);
            break;
        case 3:printf("请输入要转换的数值和进制:n");
            scanf("%d%d",&i,&j);
            conversion(i,j);
            break;
        case 4:exit(0);
            break;
        default:printf("输入有误,请重新输入: n");
        }
       	printf("********************************");
		printf("n*****1.入栈       2.出栈****n");
		printf("*****3.进制转化   4.退出****n");
		printf("********************************nn");
		scanf("%d", &x);
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号