主题:[讨论]栈的插入和删除
l345711860
[专家分:0] 发布于 2008-10-08 23:53:00
怎样在栈中插入和删除一个一个元素,要完整的源代码
回复列表 (共5个回复)
沙发
elegant87 [专家分:700] 发布于 2008-10-11 07:36:00
#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;
}
板凳
风雨中人 [专家分:0] 发布于 2008-10-14 21:12:00
怎么运行不了的!
3 楼
abzhang [专家分:550] 发布于 2008-10-23 11:35:00
汗
4 楼
chinaeye79 [专家分:0] 发布于 2008-10-24 23:39:00
这个程序有错误,运行结果不对。希望能够改正,谢谢!
5 楼
zhaolong [专家分:300] 发布于 2008-10-31 22:27:00
没错误很对加上system("pause");在return 前面如果是用dev C++的话否则
一闪而过
我来回复