链栈好难

/* 标准文档模板 */

#include 
" Stdio.h "
#include 
" Conio.h "
#define  DataType2 char
typedef 
struct  snode
{
    DataType2 data;
    
struct snode *next;
}
LinkStack;
/*进栈*/
LinkStack 
* pushstack(LinkStack  ** top,DataType2 x)
{
    LinkStack 
*p;
    p
=malloc(sizeof(LinkStack));
    p
->data=x;
    p
->next=*top;
    
*top=p;
    
return p;
}

/*出栈*/
LinkStack 
* popstack(LinkStack  * top)
{
    LinkStack 
*p;

    
if(top!=NULL)
    
{

        p
=top;
        top
=top->next;

        free(p);
    }

    
else
    
{
        printf(
"empty");

    }

    
return top;
}


int  main( void )
{
 
/* 此处添加你自己的代码 */
  LinkStack 
*p,*q;
  DataType2 ch;
  
int count=0;
  printf(
"Now input begin:  ");
  p
=malloc(sizeof(LinkStack));
  p
->data=getch();
  printf(
"%c",p->data);
  
while((ch=getch())!=13)
  
{
    q
=pushstack(&p,ch);
    printf(
"%c",p->data);
    count
++;
  }

  printf(
" push-->pop:  ");
  p
=q;
  printf(
"%c",p->data);
  
while(count>0)
  
{
    p
=popstack(p);
    printf(
"%c",p->data);
    count
--;
  }

  getch();
  
return 0;
}

 顺序存储结构的栈又称顺序栈,即利用一组地址连续的存储单元(如数组)依次存放从栈底到栈顶的元素,正因为顺序栈的存储单元是数组,也就必须规定数组的大小,如果数组设的太小,那它很容易就被装满。如果数组设的太大,只会浪费内存空间。这就是顺序栈的缺点。而链栈却不限制栈的大小,而且它的大小是在运行过程中有输入的数据量决定的,所以它能容下大量的数据,而且当链栈很小时也不会浪费空间。不过在调试的过程中,出现了一个莫名其妙的现象,无论我往栈中输入多少的数据,栈顶指针始终停留在初始位置,这使我想起了以前一个交换值函数,无论在功能函数中怎么更改,主函数中的数据就是按兵不动。不仅是数值,指针也存在这样的问题,所以要传递指针的地址,在子函数中直接修改指针,当这一步完成时,链栈也就没什么难的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值