首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-15 
菜鸟问题。.请高手帮帮忙....///栈的插入和删除....#includestdio.h#includestdlib.h#definestack_init

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

#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;


}

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

热点排行