加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

顺序栈的小结

(2014-02-26 23:11:52)
标签:

数据结构

c语言

顺序栈

分类: 数据结构总结


学习数据结构感觉没有什么体会,特此写此博文,一方面回忆知识点,另一方面可以帮助那些在学习这门课的同学何乐而不为呢.当然鉴于水平有限,如果读者朋友发现有什么问题,可以联系我,非常感谢,或者给我评论,http://www/uc/myshow/blog/misc/gif/E___6721EN00SIGG.gif

本文参考数据结构C语言版  严蔚敏教材.


#include

#include

#include

#define STACK_INIT_SIZE 100  //初始量

#define STACKINCREMENT  10  //增加量

 

typedef int Status;

typedef int SElemType;

 

typedef  struct {

       SElemType *base;

       SElemType *top;

       int stacksize;

      

}SqStack;

 

Status InitStack(SqStack &S)

{

       //构造空栈

       S.base = (SElemType *)malloc (STACK_INIT_SIZE *sizeof (SElemType));

       if (!S.base ) exit(-2);

       S.top = S.base;

       S.stacksize = STACK_INIT_SIZE;

       return 1;

}

 

Status GetTop (SqStack S,SElemType &e){//得到栈顶元素

       if (S.top ==S.base)  return 0;

       e = *(--S.top);

       return 1;

}

 

Status Pop (SqStack &S,SElemType &e){//出栈

       if (S.top ==S.base)  return 0;

       S.top --;

       e = *(S.top);

       return 1;

}

 

 

Status Push (SqStack &S,SElemType e){//入栈

       if (S.top-S.base>=S.stacksize){

              S.base =  (SElemType*)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof (SElemType));

              if (S.base==NULL)  exit(-1);

              S.top= S.base + S.stacksize;//有点问题

              S.stacksize += STACKINCREMENT;

       }

       *(S.top) =e;

       S.top++;

       return 1;

}

 

 

Status StackEmpty(SqStack S)//若栈S为空,则返回1,否则返回0

{

       if(S.top==S.base)

              return 1;      

    else

              return 0;

      

}//StackEmpty

 

 

Status StackLength(SqStack S){       //返回S的元素个数

       int length= 0;

       if (S.base ==S.top)  return length;

       else {

              while (S.base!=S.top){

                     length++;

                     S.top--;

              }

       }

       return length;

}//StackLength

 

 

Status StackTraverse(SqStack &S)

{//从栈顶到栈底依次对栈中的每个元数调用函数printf();

       if (!StackEmpty(S)){

             

              SElemType *p=S.top;

             

              while(p>S.base){

                     printf("%d\t", * --p);

              }

             

              printf("\n\n");

             

       }

       return 0;

}

 

int main()   

  

      

      

       int m;

       printf(" 1,建立一个栈\n");

       printf(" 2,入栈\n");

       printf(" 3,出栈\n");

       printf(" 4,得到栈顶元素\n");

       printf (" 5,栈中元素个数\n");

       printf(" 0,结束程序\n");

       do   {

              printf ("请输入需要操作对应的操作:");

              SqStack S;

              scanf ("%d",&m);

              fflush(stdin);//清空缓冲区

              switch (m){

              case 1: {

                     InitStack (S);

                     int n,num;

                     printf ("请输入栈中元素的个数: ");

                     scanf ("%d",&n);

                     fflush (stdin);

                     printf ("请依次输入栈中元素: ");

                     for(int i=0;i

                            scanf ("%d",&num);

                            Push(S,num);

                     }

                     StackTraverse(S);

                     break;

                            }

              case 2:{

                     int  num;

                     printf ("请输入你要入栈的 数字: ");

                     scanf("%d",&num);

                     fflush (stdin);

                     Push (S,num) ;

                     StackTraverse( S);

                     break;

                        }

              case 3:{

                     int num;

                     Pop (S, num);

                     printf ("出栈元素是 %d\n",num);

                     StackTraverse( S);

                     break;

                    

                        }

              case 4:{

                     int n;

                    

                     GetTop(S,n);

                     printf (" %d \n",n);

                     StackTraverse( S);

                        }

              case 5:{

                     printf ("\n栈中元素个数: %d \n",StackLength(S));

                     break;

                        }

                    

                    

              }

       }while(m !=0);           

      

       return 0;

}


下面是程序运行的结果:

http://s2/mw690/003AAPhVzy6GTKeGLSx81&690

0

阅读 收藏 喜欢 打印举报/Report
前一篇:顺序表小结
后一篇:链队列小结
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有