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