链栈好难

来源:互联网 发布:mac 安装xcode 编辑:程序博客网 时间:2024/04/20 07:33
/* 标准文档模板 */

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

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

原创粉丝点击