主题:[原创]栈的问题
#include<stdio.h>
#include<malloc.h>
#include<process.h>
typedef int elemtype ;
typedef int status;
//用的是 顺序存储结构
struct stack //栈结构
{
elemtype *top;
elemtype *base;
int stacksize;
};
typedef struct stack stack;
#define Stack_Size 100 //站的长度
#define Sizeincrese 10//不够了就添
#define ok 1
#define error 0
#define overflow 0
//全部用线性表实现
//***********************************************************************************************
//空栈
status makestack(stack *s)
{
s->base=(elemtype*)malloc(Stack_Size * sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top = s->base ;
s->stacksize=Stack_Size ;
return ok;
}
//************************************************************************************************
//插入一个元素为新的栈顶元素
status push(stack *s, elemtype e)
{
if(s->top - s->base >= s->stacksize)
{
s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top=s->base+Stack_Size;
s->stacksize += Sizeincrese;
}
*(s->top++)=e;
return ok;
}
//***********************************************************************************************
//弹出一个栈顶元素,并用e返回其值
status pop(stack *s,elemtype *e)
{
if(s->base==s->top)
puts("此栈为空");
return error;
*e=*(--s->top);
return ok;
}
//************************************************************************************************
//若栈不为空,返回栈顶元素
status gettop(stack *s,elemtype *e)
{
if(s->base == s->top)
{
puts("此栈为空");
return error;
}
*e=*(s->top - 1);
return ok;
}
//*************************************************************************************************
//检测栈是否为空
status stackempty(stack *s)
{
if(s->base == s->top)
return ok;
else
return error;
}
//*************************************************************************************************
//主函数
//输入一个十进制数,转换为八进制数
int main()
{
int number10=0;
elemtype e=0;
stack s0;
makestack(&s0);
puts("请输入你的十进制数: " );
scanf("%d",number10);
while(number10)
{
push(&s0,number10%8);
number10=(int)(number10/8);
}
while(!stackempty(&s0))
{
pop(&s0,&e);
printf("输出的八进制数为:%d",e);
}
return 1;
}
刚开始学数据结构 ,碰到的问题还挺多,就多麻烦大家了!问题是:
我再VC上运行时,总在分配空间是停下来,要驱动器 还有DBGHEAP.C的路径我取消后
出来一大串汇编指令,不懂了!另外在如果数量超出占第一次分配范围时,要重新分配
我似乎对上边的做法有点不懂!//插入一个元素为新的栈顶元素
status push(stack *s, elemtype e)
{
if(s->top - s->base >= s->stacksize)
{
s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top=s->base+Stack_Size;
s->stacksize += Sizeincrese;
}
*(s->top++)=e;
return ok;
请大家帮忙!
#include<malloc.h>
#include<process.h>
typedef int elemtype ;
typedef int status;
//用的是 顺序存储结构
struct stack //栈结构
{
elemtype *top;
elemtype *base;
int stacksize;
};
typedef struct stack stack;
#define Stack_Size 100 //站的长度
#define Sizeincrese 10//不够了就添
#define ok 1
#define error 0
#define overflow 0
//全部用线性表实现
//***********************************************************************************************
//空栈
status makestack(stack *s)
{
s->base=(elemtype*)malloc(Stack_Size * sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top = s->base ;
s->stacksize=Stack_Size ;
return ok;
}
//************************************************************************************************
//插入一个元素为新的栈顶元素
status push(stack *s, elemtype e)
{
if(s->top - s->base >= s->stacksize)
{
s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top=s->base+Stack_Size;
s->stacksize += Sizeincrese;
}
*(s->top++)=e;
return ok;
}
//***********************************************************************************************
//弹出一个栈顶元素,并用e返回其值
status pop(stack *s,elemtype *e)
{
if(s->base==s->top)
puts("此栈为空");
return error;
*e=*(--s->top);
return ok;
}
//************************************************************************************************
//若栈不为空,返回栈顶元素
status gettop(stack *s,elemtype *e)
{
if(s->base == s->top)
{
puts("此栈为空");
return error;
}
*e=*(s->top - 1);
return ok;
}
//*************************************************************************************************
//检测栈是否为空
status stackempty(stack *s)
{
if(s->base == s->top)
return ok;
else
return error;
}
//*************************************************************************************************
//主函数
//输入一个十进制数,转换为八进制数
int main()
{
int number10=0;
elemtype e=0;
stack s0;
makestack(&s0);
puts("请输入你的十进制数: " );
scanf("%d",number10);
while(number10)
{
push(&s0,number10%8);
number10=(int)(number10/8);
}
while(!stackempty(&s0))
{
pop(&s0,&e);
printf("输出的八进制数为:%d",e);
}
return 1;
}
刚开始学数据结构 ,碰到的问题还挺多,就多麻烦大家了!问题是:
我再VC上运行时,总在分配空间是停下来,要驱动器 还有DBGHEAP.C的路径我取消后
出来一大串汇编指令,不懂了!另外在如果数量超出占第一次分配范围时,要重新分配
我似乎对上边的做法有点不懂!//插入一个元素为新的栈顶元素
status push(stack *s, elemtype e)
{
if(s->top - s->base >= s->stacksize)
{
s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
if(!s->base)
exit(overflow);
s->top=s->base+Stack_Size;
s->stacksize += Sizeincrese;
}
*(s->top++)=e;
return ok;
请大家帮忙!