《栈和队列》word版

《栈和队列》word版

ID:29936837

大小:78.04 KB

页数:5页

时间:2018-12-25

《栈和队列》word版_第1页
《栈和队列》word版_第2页
《栈和队列》word版_第3页
《栈和队列》word版_第4页
《栈和队列》word版_第5页
资源描述:

《《栈和队列》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第三章栈和队列1.何为栈和队列?简述两者的区别和联系。栈:是一种只允许在一端进行插入和删除的线性表,它是一种操作受限的线性表。在表中只允许进行插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈顶元素总是最后入栈的,因而是最先出栈;栈底元素总是最先入栈的,因而也是最后出栈。因此,栈也被称为“后进先出”的线性表。队列:队列(queue)是一种只允许在一端进行插入,而在另一端进行删除的线性表,它是一种操作受限的线性表。在表中只允许进行插入的一端称为队尾(rear),只允许进行删除的一端称为队头

2、(front)。队头元素总是最先进队列的,也总是最先出队列;队尾元素总是最后进队列,因而也是最后出队列。因此,队列也被称为“先进先出”表。区别和联系:从数据结构上看,栈和队列也是线性表,不过是两种特殊的线性表。栈只允许在表的一端进行插入或删除操作,队列只允许在表的一端进行插入操作、而在另一端进行删除操作。因而,栈和队列也可以被称作为操作受限的线性表。2.若依次读入数据元素序列{a,b,c,d}进栈,进栈过程中允许出栈,试写出各种可能的出栈元素序列。可能的出栈序列:a,b,c,db,c,d,ab,a,c,da

3、,b,d,ca,d,c,ba,c,b,da,c,d,bb,d,c,ab,a,d,cc,d,b,ac,b,d,ac,b,a,dd,c,b,a等3.试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1—序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而’1+3&3-1’则不是。StatusModel(){ //识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列 //序列1和序

4、列2中不包含字符‘&’,序列1是序列2的逆序列 InitStack(s); c=getchar(); while(c!='&'){Push(s,c);c=getchar();} c=getchar(); while(c!='@'&&!StackEmpty(s)){   Pop(s,x);   if(c==x)c=getchar();   elsereturnFALSE; } if(c=='@'&&StackEmpty(s))returnTRUE; elsereturnFALSE;} 4.试写一个判别表达式中

5、开、闭括号是否配对出现的算法。StatusBracket_Test(char*str)//判别表达式中小括号是否匹配{  count=0;  for(p=str;*p;p++)  {    if(*p=='(')count++;    elseif(*p==')')count--;    if(count<0)returnERROR;  }  if(count)returnERROR;//注意括号不匹配的两种情况  returnOK;}//Bracket_Test5.假设表达式由单字母变量和双目四则运算算符

6、构成。试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。voidNiBoLan(char*str,char*new)//把中缀表达式str转换成逆波兰式new{  p=str;q=new;//为方便起见,设str的两端都加上了优先级最低的特殊符号  InitStack(s);//s为运算符栈  while(*p)  {    if(*p是字母))*q++=*p;//直接输出    else    {      c=gettop(s);      if(*p优先级比c高)push(s,*p);

7、      else      {        while(gettop(s)优先级不比*p低)        {          pop(s,c);*(q++)=c;        }//while        push(s,*p);//运算符在栈内遵循越往栈顶优先级越高的原则      }//else    }//else    p++;  }//while}//NiBoLan6.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和

8、出队列的算法。voidInitCiQueue(CiQueue&Q)//初始化循环链表表示的队列Q{  Q=(CiLNode*)malloc(sizeof(CiLNode));  Q->next=Q;}//InitCiQueuevoidEnCiQueue(CiQueue&Q,intx)//把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队头元素{  p=(C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。