回 帖 发 新 帖 刷新版面

主题:[讨论]栈的插入和删除

怎样在栈中插入和删除一个一个元素,要完整的源代码

回复列表 (共5个回复)

沙发


#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10

typedef struct
{
    int *base;
    int *top;
    int stacksize;
}Stack;

void InitStack(Stack &s);//创建栈

void Push(Stack &S,int e);//入栈

void Pop(Stack &s,int &e);//出栈

bool StackEmpty(Stack s);

void main()
{
    Stack s;
    InitStack(s);
    int value,m,e=0;
    printf("请任意输入一个十进制的数: ");
    scanf("%d",&value);
    printf("\n请输入要转换的进制: ");
    scanf("%d",&m);
    while(value)
    {
        Push(s,value%m);
        value=value/m;
    }
    printf("\n转换为%d进制的数为: ",m);
    while(!StackEmpty(s))
    {
        Pop(s,e);
        printf("%d",e);
    }
    printf("\n");
    
}

void InitStack(Stack &s)
{
    s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
    if(!s.base)
    {
        printf("Error!\n");
        exit(0);
    }
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
}

void Push(Stack &s,int e)
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
        if(!s.base)
        {
            printf("Error!\n");
            exit(0);
        }
        s.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *s.top++=e;
}


void Pop(Stack &s,int &e)
{
    if(s.top==s.base)
    {
        printf("Error!\n");
        exit(0);
    }
    e=* --s.top;
}

bool StackEmpty(Stack s)
{
    if(s.top==s.base)
        return true;
    else
        return false;
}

板凳

怎么运行不了的!

3 楼

4 楼

这个程序有错误,运行结果不对。希望能够改正,谢谢!

5 楼

没错误很对加上system("pause");在return 前面如果是用dev C++的话否则
一闪而过

我来回复

您尚未登录,请登录后再回复。点此登录或注册