快捷搜索:  汽车  科技

数据结构栈和队列总结(数据结构-栈和队列)

数据结构栈和队列总结(数据结构-栈和队列)2.1压栈栈的基本运算顺序栈的基本运算的实现判栈空,置空栈,求元素个数算法容易实现,只要判断或改变s.top的值即可。下面仅给出进栈,出栈,取栈顶元素等函 数的算法实现。

任一表达式都可看成是由操作数,运算符和界限符组成的 一个串。其中,操作数可以是常数也可以是变量或常量的标识 符,运算符可以是算术运算符,关系运算符和逻辑运算符等,界限符包括左右括号和表达式结束符等,例表达式7 4*(8-3)。 计算机要完成表达式的求值,必须正确的解释表达式,将其翻译成正确的机器指令序列。要了解计算机的求值过程,必须先研究栈的性质。

1:栈的定义和基本运算

栈是限定只能在表尾进行插入和删除的线性表,并将表尾 称为栈顶,表头称为栈底。给出了非空栈s=(A B C D)的示意图。

数据结构栈和队列总结(数据结构-栈和队列)(1)

由于限定只能在栈顶进行操作 所以栈中元素必按A B C D 次序进栈 按D C B A次序出栈 即按"后进先出"(或“先进后出") 的原则进行操作的。这一特点可用生活中的实例形象说明。例如每次只能容一个人进出的死胡同就相当一个栈,胡同口相当于栈顶,而胡同的另一端则为栈底。

栈的基本运算

顺序栈的基本运算的实现

判栈空,置空栈,求元素个数算法容易实现,只要判断或改变s.top的值即可。下面仅给出进栈,出栈,取栈顶元素等函 数的算法实现。

压栈

2.1

/*算法描述2-1*/

int Push(Stack S Datatype x)

{if (S.top==maxsize) {printf("overflow\n"); return(0);}

S.data[ S.top]=x; return(1);

2.2 出栈

/*算法描述2-2*/

int Pop(Stack s Datatype x) {if(S.top==0){printf("nudertflow\n");return(0)};

x=S.data[S.top]; S.top--; return(1);

}

2.3 取栈顶元素

/*算法描述2-3*/

int Gettop(Stack S Datatype x) {if(S.top==0){printf("nodata\N");return(0);}

x=S.data[top]; return(1); }

3 队列

队列的定义和运算

和栈相反,队列是一种“先进先出”的线性表。他只允许再表的一端(称表尾)插入元素,在表的另一端(表头)删除元素。队列和日常生活中的排队是一致的,最早进入队列的元素最早得到服务。

给出可队列示意图。

数据结构栈和队列总结(数据结构-栈和队列)(2)

队列的操作与栈的操作类似,不同的是删除运算是在表头进行。

(1)判队空 EmptyQueue(Q) 若队列为空则返回“真“,否则返 回”假“;

入队将新元素插入到队尾。

(2) InQueue(Q x) x ;

(3)出队OutQueue(Q x) 若队列不空则返回队首的第一个元素元素,并从队列中删除该元素,否则返回NULL;

(4)置空队列InitQueue(Q) 将当队列设定为空队列;

(5)求元素个数 CurrentSize(Q) 返回当前队列中元素的个数 。

队列的存储结构及其算法实现

和栈类似,队列的顺序存储结构用一个向量来存储队列中 的元素,不过还需两个指针来指示队头元素和对尾元素在队列 中的当前位置。C语言描述如下:

# define maxsize N

typedef stuct

{Datatype adta[maxsize 1];

int front rear; } Queue;

数据结构栈和队列总结(数据结构-栈和队列)(3)

3.1 顺序队列的基本运算

(1)判队空

/*算法描述3-1*/

int EmptyQueue(Queue Q)

{if (Q.front==Q.rear) return(1); else return(0);}

3.2

入队 /*算法描述3.2*/

int InQueue(Queue Q Datatype x)

{if (Q.rear==maxsize) {printf("overflow!"); return(0);}

Q.rear ;

Q.data[Q.rear]=x; return(1);}

3.3 出队

/*算法描述3-3*/

int OutQueue(Queue Q Datatype x) {if(EmptyQueue(Q)){printf("underflow!"); return(0);}

x=Q.data[Q.front 1];

Q.front ; if(EmptyQueue(Q)){Q.front=0; Q.rear=0} return(1);}

了解以上基本简单运算即可,具体事例可以是计算一个数学公式即可,根据计算优先级依次用栈实现,详细代码这里不列入。

以上,了解数据结构语法~

猜您喜欢: