链栈的基本操作

作者在 2007-12-29 23:02:54 发布以下内容

花一个晚上写了栈的顺序存储与链式存储,实现了一些对栈的基本操作,今天就写到这里了,呵呵。。。以后再加上栈的应用

#include <stdio.h>
#include <stdlib.h>
typedef char DateType;
typedef struct node
{
    DateType data;
 struct node* next;
}LinkStack;
LinkStack *top;
void InitStack()
{
 top=(LinkStack*)malloc(sizeof(LinkStack));
 top->next=NULL;
 top->data=0;
 printf("\n\t\t\t初始化链栈成功!");
}
void push(DateType x)
{
 LinkStack* s;                              //注意不要把s定义为全局变量
 s=(LinkStack*)malloc(sizeof(LinkStack));
 s->data=x;
 s->next=top;
 top=s;
 printf("\n\t\t\t入栈成功!");
}
void pop()
{
 LinkStack* s;
 s=top;
    if(s==NULL)
 {
  printf("\n\t\t\t栈为空!");
 }
 else
 {
        top=s->next;
  free(s);
  printf("\n\t\t\t出栈成功");
 }
}
void readTop()
{
 if(top==NULL)
 {
  printf("\n\t\t\t栈为空!");
 }
 else
 {
  printf("\n\t\t\t栈顶元素为:%c",top->data);
 }
}
void lenStack()
{
 int i=0;
 LinkStack* s;
 s=top;
 if(s==NULL)
 {
  printf("\n\t\t\t栈为空!");
 }
 else
 {
  while(s!=NULL)
  {
            i++;
   s=s->next;
  }
  printf("\n\t\t\t链栈长度为:%d",i);
 }
}
void showStack()
{
 LinkStack* s;
 s=top;
 if(s==NULL)
 {
  printf("\n\t\t\t栈为空!");
 }
 else
 {
  printf("\n\t\t\t链栈元素为:\n");
  printf("\t\t\t");
  while(s!=NULL)          //遍历时注意不要用top,不然第二次遍历时top移动到最后一个元素之后了
  {
            printf("%c\t",s->data);
   s=s->next;
  }
 }
}
void main()
{
 int i,j;
 DateType x;
 while(j)
 {
  printf("\n\n\n\n");
  printf("\n\t\t\t*************************************");
  printf("\n\t\t\t***       1---创建链栈            ***");
  printf("\n\t\t\t***       2---入栈                ***");
  printf("\n\t\t\t***       3---出栈                ***");
  printf("\n\t\t\t***       4---读栈顶元素          ***");
  printf("\n\t\t\t***       5---链栈长度            ***");
  printf("\n\t\t\t***       6---显示链栈元素        ***");
  printf("\n\t\t\t***       0---退出                ***");
  printf("\n\t\t\t*************************************\n");
  printf("\n\t\t\t请选择菜单号(0---6):");
  scanf("%d",&i);getchar();
  if(i==1)
  {
   InitStack();
  }
  else if(i==2)
  {
   if(top==NULL)
   {
    printf("\n\t\t\t请先初始化链表!");
   }
   else
   {
    printf("\n\t\t\t请输入要入栈的元素:");
       scanf("%c",&x);
       push(x);
   }
  }
        else if(i==3)
  {
   pop();
  }
  else if(i==4)
  {
   readTop();
  }
  else if(i==5)
  {
   lenStack();
  }
  else if(i==6)
  {
   showStack();
  }
  else if(i==0)
  {
   j=0;
   printf("\n\t\t\t程序结束\n");
  }
 }
}

数据结构与算法 | 阅读 9652 次
文章评论,共0条
游客请输入验证码
浏览67716次