程序中的栈和队列是什么意思

程序中的栈和队列是什么意思,第1张

栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表,称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈

的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last

In

First

Out)。通常栈有顺序栈和链栈两种存储结构。

栈的基本运算有六种:

·构造空栈:InitStack(S)

·判栈空:

StackEmpty(S)

·判栈满:

StackFull(S)

·进栈:

Push(S,x)

·退栈:

Pop(S)

·取栈顶元素:StackTop(S)

在顺序栈中有"上溢"和"下溢"的现象。

·"上溢"是栈顶指针指出栈的外面是出错状态。

·"下溢"可以表示栈为空栈,因此用来作为控制转移的条件。

顺序栈中的基本 *** 作有六种:·构造空栈·判栈空·判栈满·进栈·退栈·取栈顶元素

链栈则没有上溢的限制,因此进栈不要判栈满。链栈不需要在头部附加头结点,只要有链表的头指针就可以了。

链栈中的基本 *** 作有五种:·构造空栈·判栈空·进栈·退栈·取栈顶元素

队列(Queue)是一种运算受限的线性表,插入在表的一端进行,而删除在表的另一端进行,允许删除的一端称为队头(front),允许插入的

一端称为队尾(rear)

,队列的 *** 作原则是先进先出的,又称作FIFO表(First

In

First

Out)

。队列也有顺序存储和链式存储两种存储结

构。

队列的基本运算有六种:

·置空队:InitQueue(Q)

·判队空:QueueEmpty(Q)

·判队满:QueueFull(Q)

·入队:EnQueue(Q,x)

·出队:DeQueue(Q)

·取队头元素:QueueFront(Q)

顺序队列的"假上溢"现象:由于头尾指针不断前移,超出向量空间。这时整个向量空间及队列是空的却产生了"上溢"现象。

为了克服"假上溢"现象引入循环向量的概念,是把向量空间形成一个头尾相接的环形,这时队列称循环队列。

判定循环队列是空还是满,方法有三种:

·一种是另设一个布尔变量来判断;

·第二种是少用一个元素空间,入队时先测试((rear+1)%m

=

front)?

满:空;

·第三种就是用一个计数器记录队列中的元素的总数。

队列的链式存储结构称为链队列,一个链队列就是一个 *** 作受限的单链表。为了便于在表尾进行插入(入队)的 *** 作,在表尾增加一个尾指

针,一个链队列就由一个头指针和一个尾指针唯一地确定。链队列不存在队满和上溢的问题。在链队列的出队算法中,要注意当原队中只

有一个结点时,出队后要同进修改头尾指针并使队列变空。

循环单链中尾指针执行一个命令百:rear=rear->next不就成头指针了~

插入:

InserterList_Dul(DuLNode *l,Datatype *p,Datatype e)/*将E元素插入到循环单链表L中度的P指针所指的元素前面*/

{

s=(struct DuLNode *)malloc(sizeof(sturct DuLNode))/*申请一个节点,让指针S指向它*/

s->data=e/*将S送入内新节点*/

s->next=p/*使新节点的后继指针指向P*/

s->prior=p->prior/*使新节点的前驱指针指向P的前驱指针*/

p->prior->next=s/*使P的前驱节点的后继指针指向新节点*/

p->prior=s/*使P的前驱指针指向新节点*/

}

删除:

DeleteList_Dul(DulNOde *l,DuLnode *p) /*删除循环单链表L中P指针所指的元素*/

{

p->prior->next=p->next/*使P的前驱节点的后继指针指向P的后继节容点*/

p->next->prior=p->prior/*使P的后继节点的前向指针指向P的前驱节点*/

free(p)/*释放P所指被删除的节点*/

}

利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。

MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,Client端需要和Server端实时交换信息,Server需要保持联机。MSMQ则可以在Server离线的情况下工作,将Message临时保存在Client端的消息队列中,以后联机时再发送到Server端处理。

显然,MSMQ不适合于Client需要Server端及时响应的这种情况,MSMQ以异步的方式和Server端交互,不用担心等待Server端的长时间处理过程。

虽然XML Web Services和.Net Remoting都提供了[OneWay]属性来处理异步调用,用来解决Server端长方法调用长时间阻碍Client端。但是不能解决大量Client负载的问题,此时Server接受的请求快于处理请求。

一般情况下,[OneWay]属性不用于专门的消息服务中。

1. 基本术语和概念(Basic terms and concepts)

“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。

消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

“消息队列”是 Microsoft 的消息处理技术,它在任何安装了 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。

“消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。

“消息队列”安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。

“消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销,确定经过多个站点传递消息的最快和最有效的方法,以此决定如何传递消息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11594507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存