数据结构学习心得系列(二)

本博文意在巩固基础知识,高手请绕过。部分代码和内容参考严蔚敏人民邮电版出版社《数据结构》

 

栈和队列

  栈:限定仅在一端进行插入或删除操作的线性表

  栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。

  栈底(Bottom):是固定端,又称为表头。

  空栈:当表中没有元素时称为空栈。

在栈中最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。

  特点 :后进先出LIFO (Last  In  First  Out)

栈的应用

  括号匹配的检验

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([ ][ ])]等为正确的格式,[( ])或([( ))或 ()])均为不正确的格式。

  算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回FLASE。

算法描述

#define TRUE  0

#define  FLASE  -1

SqStack  S ; 

S=Init_Stack() ;  /*堆栈初始化*/

int Match_Brackets( )

{   char ch , x ;

scanf(“%c” , &ch) ;

 while (asc(ch)!=13)

{   if  ((ch==‘(’)||(ch==‘[’))  push(S , ch) ; 

else if  (ch==‘]’) 

     {  x=pop(S) ; 

         if (x!=‘[’)

                 {  printf(“’[’括号不匹配”) ; 

                     return FLASE  ;  }   }

else if  (ch==‘)’) 

      {  x=pop(S) ;

          if (x!=‘(’) 

              { printf(“’(’括号不匹配”) ; 

                 return FLASE  ;}

      } 

}

if  (S.top!=0) 

{    printf(“括号数量不匹配!”) ;

      return FLASE  ;

}

else  return TRUE  ; 

}

 队列

  队列:限定仅在一端进行插入,而在另一端进行删除操作的线性表。

  队头:允许删除的一端称为队头(front)

  队尾:允许插入的一端称为队尾(rear)

  空队列:队列中没有元素时称为空队列

  特点 :先进先出FIFO (First In First Out)

队列的链式表示和实现

  队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单链表。需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点

链队运算及指针变化

  链队的操作实际上是单链表的操作,只不过是删除在表头进行,插入在表尾进行。插入、删除时分别修改不同的指针。

 

posted @ 2015-11-19 14:56  追风的小蜗牛  阅读(567)  评论(0编辑  收藏  举报