您的位置:首页 > 其它

链栈好难

2008-03-14 02:27 134 查看



/**//* 标准文档模板 */




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


}

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