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