栈和队列在项目中的应用

如题所述

第1个回答  2012-08-18
队列的应用--舞伴问题
  1、问题叙述
  假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
  若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。
  2、问题分析
  先入队的男士或女士亦先出队配成舞伴。因此该问题具体有典型的先进先出特性,可用队列作为算法的数据结构。
  在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还
  是女队。当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍有等待配
  对者,算法输出此队列中等待者的人数及排在队头的等待者的名字,他(或她)将是下一轮舞曲开始时第一个可获得舞伴的人。
  3、具体算法及相关的类型定义
  typedef struct{
  char name[20];
  char sex; //性别,'F'表示女性,'M'表示男性
  }Person;
  typedef Person DataType; //将队列中元素的数据类型改为Person
  void DancePartner(Person dancer[],int num)
  {//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
  int i;
  Person p;
  CirQueue Mdancers,Fdancers;
  InitQueue(&Mdancers);//男士队列初始化
  InitQueue(&Fdancers);//女士队列初始化
  for(i=0;i<NUM;I++){ 依次将跳舞者依其性别入队< p>  p=dancer[i];  if(p.sex=='F')  EnQueue(&Fdancers.p); //排入女队  else  EnQueue(&Mdancers.p); //排入男队  }  printf("The dancing partners are: \n \n");  while(!QueueEmpty(&Fdancers)&&!QueueEmpty(&Mdancers)){  //依次输入男女舞伴名  p=DeQueue(&Fdancers); //女士出队  printf("%s ",p.name);//打印出队女士名  p=DeQueue(&Mdancers); //男士出队  printf("%s\n",p.name); //打印出队男士名  }  if(!QueueEmpty(&Fdancers)){ //输出女士剩余人数及队头女士的名字  printf("\n There are %d women waitin for the next round.\n",Fdancers.count);  p=QueueFront(&Fdancers); //取队头  printf("%s will be the first to get a partner. \n",p.name);  }else  if(!QueueEmpty(&Mdancers)){//输出男队剩余人数及队头者名字  printf("\n There are%d men waiting for the next round.\n",Mdacers.count);  p=QueueFront(&Mdancers);  printf("%s will be the first to get a partner.\n",p.name);  }  }//DancerPartners

参考资料:希赛教育

栈和队列在现实生活的应用
栈用于符号匹配、用于计算代数式,也可以用二叉树来解决、构造表达式、用于函数调用。当多个任务分配给打印机时,为了防止冲突,创建一个队列,把任务入队,按先入先出的原则处理任务。当多个用户要访问远程服务端的文件时,也用到队列,满足先来先服务的原则。栈又名堆栈,是一种运算受限的线性表。限定...

栈和队列的作用是什么?它们主要可以应用在哪些方面?
3. 栈的应用场景包括递归算法、表达式求值、后退功能、程序调用的存储等。例如,在递归函数中,每次函数调用都会将当前状态压入栈中,以便稍后能够返回到正确的执行点。4. 队列的应用场景包括任务调度、缓冲处理、打印队列、程序间的通信等。例如,在网络编程中,队列用于暂存到达的数据包,按照到达的顺序进...

栈和队列区别是什么意思?
栈通常用于需要反向追踪的应用,如函数调用、表达式求值、括号匹配等;而队列则用于需要对数据进行排序和缓存的应用,如任务调度、计算机网络数据传输、广度优先搜索等。在使用栈和队列时,需要根据实际情况选择合适的数据结构来实现相应的操作。通常,栈可以使用数组或链表来实现,而队列则可以使用单向队列、双...

栈和队列在实际中的例子
栈:铁路调度中用到栈。队列:民航机票订购。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底。最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除...

专题篇|栈与队列详解
除了以上应用场景外,栈和队列还有很多其他的应用,比如栈还可以用于实现递归算法,队列用于广度优先搜索等。下面就让我们通过几个经典问题深入了解栈和队列吧! 经典问题 (一) 题目描述:验证栈序列 给定pushed 和 popped 两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操...

栈和队列数据结构的特点,什么情况下用到栈,什么情况下用到队列(各举3...
\/\/一般只要你满足这个特点就可以称之为栈或队列。栈的应用:非常广泛,在CPU内部就有提供栈这个机制。主要用途:函数调用和返回,数字转字符,表达式求值,走迷宫等等。在CPU内部栈主要是用来进行子程序调用和返回,中断时数据保存和返回。在编程语言中:主要用来进行函数的调用和返回。可以说在计算机中,...

栈和队列在项目中的应用
2、问题分析 先入队的男士或女士亦先出队配成舞伴。因此该问题具体有典型的先进先出特性,可用队列作为算法的数据结构。在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还 是女队。当这两个队列构造完成之后,依次将两队当前的队头...

栈和队列都是什么结构
2、队列遵循先进先出(FIFO)的原则,类似于一个具有入口和出口的道路,最先进入的元素将最先离开。相对地,栈的运作更像是一个箱子,最后放入的元素会在顶部,因此遵循后进先出的原则。3、这两种数据结构通常使用顺序存储或链表存储方式来实现。4、栈在操作系统中的应用:由编译器自动管理,用于存储...

栈和队列的主要区别
这两种类型区别在于操作位置不同、数据进出顺序不同、应用场景不同等。1、操作位置不同:栈的插入和删除操作都是在栈顶进行,而队列的插入操作在队尾进行,删除操作在队头进行。2、数据进出顺序不同:栈是后进先出,队列是先进先出。3、应用场景不同:栈通常用于撤销操作、括号匹配等,队列通常用于缓存...

队列和栈有什么不同?
队列:先进先出,栈:先进后出 2、应用场景不同 常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。3、遍历数据速度不同。栈只能从头部取数据,也就最先放入...

相似回答
大家正在搜