数据结构学习心得系列(二)
本博文意在巩固基础知识,高手请绕过。部分代码和内容参考严蔚敏人民邮电版出版社《数据结构》
栈和队列
栈:限定仅在一端进行插入或删除操作的线性表
栈顶(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)
队列的链式表示和实现
队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单链表。需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点
链队运算及指针变化
链队的操作实际上是单链表的操作,只不过是删除在表头进行,插入在表尾进行。插入、删除时分别修改不同的指针。