读书人

初学者有关问题。.请高手帮帮忙...

发布时间: 2012-02-15 12:09:44 作者: rapoo

菜鸟问题。.请高手帮帮忙....
///栈的插入和删除....

#include <stdio.h>
#include <stdlib.h>
#define stack_init_size 100
typedef struct //栈结构体的定义。。。。
{
int *base ; //栈底指针。。。。
int *top ; //栈顶指针。。。。
int stacksize ; //初始话分配大小。。。。


} sqstack ;

int initstack(sqstack *l) //新键个栈。。。。。。
{
l=(sqstack *)malloc(stack_init_size*sizeof(int )) ; //进行开空间。。。
if(l==NULL)
return 0 ;
l-> top=l-> base ; //使栈为空。。。
l-> stacksize=stack_init_size ; //初始分配大小。。。
return 1;

}

int gettop(sqstack *l,int *m) //返回栈顶元素。。。
{
if(l==NULL)
return 0;
*m=*(l-> top-1); //栈定元素给m返回。。。。
return 1;

}

int push(sqstack *l,int e) //插入新的栈顶元素。。。。。。。。
{
*(l-> top++)=e;
return 1;

}

int pop(sqstack *l ) //删除栈顶元素。。。。。。
{
if(l==NULL)
return 0;
l-> top=(--l-> top); //去掉栈顶元素。。。。
return 1;

}

int main()
{
sqstack a ;
int i,n,m,j,u;
initstack(&a);

for(i=0;i <10;i++) //输入10个数在栈里面去。。。
{
scanf( "%d ",&n);
*(a.top)=n;
a.top++ ;

}
scanf( "%d ",&m) ; //在输入一个数,,放到栈顶。。
push(&a,m) ; //输入。。。
gettop(&a,&u); //返回栈顶元素。。。
printf( "%d ",u);
a.top=a.base ; //使指针重新指向第一个元素。。。。
for(j=*(a.top);j;j++) //输出插入后的所有元素。。
printf( "%d ",a.top);
pop(&a); //删除。。。
a.top=a.base ;//使指针重新指向第一个元素。。。。
for(j=*(a.top);j;j++)//输出删除后的所以元素。。。。
printf( "%d ",a.top);
return 1;


}


  这个程序..编译没有错...可能是算法的某的地方错了。..是高手们帮帮忙,,谢谢了...

[解决办法]
//栈的插入和删除....

#include <stdio.h>
#include <stdlib.h>
#define stack_init_size 100
typedef struct //栈结构体的定义。。。。
{
int *base ; //栈底指针。。。。
int *top ; //栈顶指针。。。。
int stacksize ; //初始话分配大小。。。。


} sqstack ;

//这里修改了
int initstack(sqstack &l) //新键个栈。。。。。。
{
//这里修改了很多
l.base =(int *)malloc(stack_init_size*sizeof(int)) ; //进行开空间。。。
if(l.base == NULL)
return 0 ;
l.top = l.base; //使栈为空。。。
l.stacksize=stack_init_size ; //初始分配大小。。。
return 1;

}

int gettop(sqstack l,int &m) //返回栈顶元素。。。


{
//这里也修改了
if(l.top==l.base)
return 0;
m=*(l.top - 1); //栈定元素给m返回。。。。
return 1;

}

int push(sqstack &l, int e) //插入新的栈顶元素。。。。。。。。
{
//这里少了判断容量够不够的语句。。。= =嘿嘿,看看书把
*(l.top++)=e;

return 1;

}

int pop(sqstack &l ) //删除栈顶元素。。。。。。
{
//这里习惯了
if(l.base==l.top)
return 0;
--l.top; //去掉栈顶元素。。。。
return 1;

}

//多了这个
//打印所有的值
void print(sqstack &l)
{
int* temp = l.base;
while (temp != l.top)
{
printf( "%d ", *temp);
temp++;
}
printf( "\n ");
}


int main()
{
sqstack a ;
int i,n,m,u;

initstack(a);

for(i=0; i <10; i++) //输入10个数在栈里面去。。。
{
scanf( "%d ",&n);
push(a, n) ; //输入。。。
}
print(a);

scanf( "%d ",&m) ; //在输入一个数,,放到栈顶。。
push(a,m) ; //输入。。。
print(a);

gettop(a,u); //返回栈顶元素。。。
printf( "%d\n ",u);
print(a);

pop(a); //删除。。。

print(a);

return 1;


}

.....我上面修改的地方都写出来的了= =,..你抄书上的把?我是照着书上的给你修改了下的

读书人网 >C语言

热点推荐