题目内容 (请给出正确答案)
[主观题]

3.算法填空题 数组q[MAX]存储一个循环队,尾指针last用...

3.算法填空题 数组q[MAX]存储一个循环队,尾指针last用来指向当前队列中的尾元素,count用来记录队列中当前元素个数。 下面的程序用于模拟队操作全过程。 提示:当count=0时,表示队空;当count=MAX时,表示队满。 当队不空时,(last-count+1+MAX)%MAX即是队头位置。 #include <stdio.h> #define MAX 400 //x 进队函数 int addq(int q[], int &last, int &count, int x) { if (count == MAX) (1) ; last = (last + 1) % MAX; (2) ; (3) ; return 1; } //x 出队函数 int delq(int q[], int last, int &count, int &x) { int f; if (count == 0) return 0; f = (4) ; x = q[f]; count--; return 1; } //输出队列中所有元素的函数 void print(int q[], int last, int count) { int i, j; if ((5) ) { printf(" 当前队中没有元素! \n"); return; } printf(" 当前队中的元素为:\n"); i = (6) ; for (j = 1; (7) ; j++) { printf("%4d", q[i]); i = (i + 1) % MAX; } printf(" \n"); } //主函数 int main() { int q[MAX], (8) , count = 0, c, k, x; while (1) { printf(" 请输入操作码,1:进队;2.出队;3.显示队内容;0:结束 c= "); scanf(" %d", &c); if (c == 0) break; if (c == 1) { printf(" 请输人进队元素x:"); scanf("%d",&x); k = (9) ; if (k==0)printf("队已满,进队失败! \n" ); else printf("%d 已进队!\n" ,x); } else if(c == 2) { k = (10) ; if(k == 0)printf("队空,无元素出队! \n"); else printf("元素%d已从队中退出! \n" ,x); } else if(c == 3) print(q, last, count); else continue; } printf("程序结束\n" ); }

查看答案
如搜索结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能会需要:
您的账号:
发送账号密码至手机
发送
更多“3.算法填空题 数组q[MAX]存储一个循环队,尾指针las…”相关的问题

第1题

【习题3-2】设一维数组elem[maxSize]存放循环队列的元素...

【习题3-2】设一维数组elem[maxSize]存放循环队列的元素,同时以rear和length分别指示循环队列中的队尾位置和队列中所含元素的个数。下面算法的功能是:插入(EnQueue)和删除(DeQueue)元素的操作。请在空白处填入正确的语句。//设该循环队列的结构定义为 #define maxSize 100 typedef int ElemType; typedef struct { //循环队列的结构定义 ElemType elem[maxSize]; //队列存储数组 int rear, length; //队列的队尾指针和队列长度。rear是实际的队尾位置。 } CircQueue; int EnQueue(CircQueue &Q, ElemType x) { //元素x存放到队列尾部。若进队列成功,函数返回true,否则返回false。 if(___________①_____________) return flase; //判队列是否不满,满则出错 Q.rear = __________②__________; //队尾指针进1 _________③__________; //进队列 _________④__________; //队列长度加1 return true; } int DeQueue(CircQueue &Q, ElemType &x) { //从队列队头退出元素由x返回。若退队列成功,函数返回true,否则返回false。 if(__________⑤__________) return false; //判断队列是否不空,空则出错 Q.length--; //队列长度减1 x = elem[(Q.rear - Q.length + 1 + maxSize) % maxSize]; //返回原队头元素值 return true; }

点击查看答案

第2题

【Test-3-2】设一维数组elem[maxSize]存放循环队列的元...

【Test-3-2】设一维数组elem[maxSize]存放循环队列的元素,同时以rear和length分别指示循环队列中的队尾位置和队列中所含元素的个数。下面算法的功能是:插入(EnQueue)和删除(DeQueue)元素的操作。请在空白处填入正确的语句。(每空4分) //设该循环队列的结构定义为 #define maxSize 100 typedef int ElemType; typedef struct { //循环队列的结构定义 ElemType elem[maxSize]; //队列存储数组 int rear, length; //队列的队尾指针和队列长度。rear是实际的队尾位置。 } CircQueue; //设该循环队列的结构定义为 #define maxSize 100 typedef int ElemType; typedef struct { //循环队列的结构定义 ElemType elem[maxSize]; //队列存储数组 int rear, length; //队列的队尾指针和队列长度 } CircQueue; //rear是实际的队尾位置。其队空条件和队满条件分别为Q.length == 0和Q.length == maxSize。 int EnQueue(CircQueue &Q, ElemType x) { //元素x存放到队列尾部。若进队列成功,函数返回true,否则返回false。 if(___________①_____________) return flase; //判队列是否不满,满则出错 Q.rear = __________②__________; //队尾指针进1 _________③__________; //进队列 _________④__________; //队列长度加1 return true; } int DeQueue(CircQueue &Q, ElemType &x) { //从队列队头退出元素由x返回。若退队列成功,函数返回true,否则返回false。 if(__________⑤__________) return false;//判断队列是否不空,空则出错 Q.length--;//队列长度减1 x = elem[(Q.rear - Q.length + 1 + maxSize) % maxSize]; //返回原队头元素值 return true; }

点击查看答案

第3题

如果希望循环队列中的向量单元都能得到利用,则可设置一个标志域tag,每当尾指针和头指针值相同时,以tag的值为O或1来区分队列状态是“空”还是“满”.请对下列函数填空,使其分别实现与此结构相应的入队列和出队列的算法.

intEnQueue(CirQueue*Q,DataType x)

{

if Q->tag==1 return 0;

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%MAXQSIZE

if(Q->rear==Q->front)Q->tag=1

return1:

}

intDeQueue(CirQueue*Q,DataType*x)

{

if((1))return0;

*x=Q->data[Q->front];

Q->front= (2) ;

(3) ;

return1;

}

(1)

(2)

(3)

点击查看答案

第4题

程序填空题: (请阅读下面拓扑排序算法程序,完成填空,...

程序填空题: (请阅读下面拓扑排序算法程序,完成填空,将答案写在该题横线上 ,每空3分,本题满分9分)。 int TopoSort (AdjList G) { Stack S; int indegree[MAX_VERTEX_NUM]; int i, count, k; ArcNode *p; FindID(G,indegree); /*求各顶点入度*/ InitStack(&S); for(i=0;i<g.vexnum;i++) if( ) push(&s,i); count="0;" while(!stackempty(s)) { pop(&s,&i); printf("%c",g.vertex[i].data); count++; p="G.vertexes[i].firstarc;" while( k="p-">adjvex; indegree[k]--; if(indegree[k]==0) Push(&S, k); ; } } /*while*/ if (count < G.vexnum) return(Error); else return(Ok); }

点击查看答案

第5题

循环队列的最大存储空间为MaxSize=6,采用少用一个元素空间以有效地判断栈空或栈满,若队头指针front=4,当队尾指针rear= 3 时队满,队列中共有 个元素。
点击查看答案

第6题

阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。

[说明]

循环队列的类型定义如下(其中队列元素的数据类型为datatype):

typedef struct{

datatype data[MAXSIZE]; /*数据的存储区*/

int front,rear; /*队首、队尾指针*/

int num; /*队列中元素的个数*/

}c _ SeQueue; /*循环队*/

下面函数及其功能说明如下:

(1) c_SeQueue* Init_SeQueue():新建队列;

(2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素x插入队列q,若成功返回1否则返回0;

(3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列q队首位置的元素,若成功返回1否则返回0。

[函数]

c_SeQueue* Init_SeQueue()

{ q=malloc(sizeof(c_SeQueue));

q->front=q->rear=MAXSIZE-1;

(1);

return q;

}

int In_SeQueue( c_SeQueue *q, datatype x)

{ if(q->num= =MAXSIZE) return 0; /*队满不能入队*/

else {

q->rear=(2);

q->data[q->rear]=x;

(3);

return 1; /*入队完成*/

}

}

int Out_SeQueue( c_SeQueue *q, datatype *x)

{ if (q->num= =0) return 0; /*队空不能出队*/

else{

*x=(4); /*读出队首元素*/

q->front=(5);

q->num- -;

return 1; /*出队完成*/

}

}

点击查看答案

第7题

下列算法实现求采用顺序结构存储的串S和串t的一个最长公共子串。 void maxcomstr(string*s,*t;int index,length) { int i,j,k,lengthl,con; index=0;length=0;i=1; while(i<=strlen(s)) { j=1; while(j<=strlen(t)) { if(s[i]==t[j] { k=1;lengthl=1;con=1; while(con) if((1)) { lengthl=lengthl+1;k=k+1; } else (2) ; if(lengthl>length) {index=i;length=lengthl;} (3); } else (4); } (5); } }

点击查看答案

第8题

【第3-4题】设有一个不带表头结点的单链表,下面递归算法...

【第3-4题】设有一个不带表头结点的单链表,下面递归算法的功能是: (1) 删除以head为头指针的单链表中值为x的所有结点。 (2) 输出以head为头指针的单链表中最大结点值。 (3) 删除并释放以head为头指针的单链表中所有结点。 请在空白处填入正确的语句。(1) void delall(LinkList &head, ElemType x) { LinkList p; if (head != NULL) { if (________①_________) { p = head; ________②________; free(p); _________③______________; } else delall(head->next, x); } } (2) ElemType MaxValue(LinkList head) { ElemType m; if (__________④___________) return (head->data); m = _______⑤_________; if (_______⑥_________) return m; else return head->data; } (3) void release(LinkList head) { if (_______⑦________) { release(head->next); _______⑧________; } }

点击查看答案

第9题

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 采用归并排序对n个元素进行递增排序时,首先将n个元素的数组分成各含n/2个元素的两个子数组,然后用归并排序对两个子数组进行递归排序,最后合并两个已经排好序的子数组得到排序结果。 下面的C代码是对上述归并算法的实现,其中的常量和变量说明如下: arr:待排序数组 p,q,r:一个子数组的位置从p到q,另一个子数组的位置从q+1到r begin,end:待排序数组的起止位置 left,right:临时存放待合并的两个子数组 n1,n2:两个子数组的长度 i,j,k:循环变量 mid:临时变量 【C代码】

inciude<stdio.h> inciude<stdlib.h> define MAX 65536 void merge(int arr[],int p,int q,int r) { int *left, *right; int n1,n2,i,j,k; n1=q-p+1; n2=r-q; if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL) { perror("malloc error"); exit(1); } if((right=(int*)malloc((n2+1)*sizeof(int)))=NULL) { perror("malloc error"); exit(1); } for(i=0;i<n1;i++){ left[i]=arr[p+i]; } left[i]=MAX; for(i=0; i<n2; i++){ right[i]=arr[q+i+1] } right[i]=MAX; i=0; j=0; for(k=p; (1) ; k++) { if(left[i]> right[j]) { (2) ; j++; }else { arr[k]=left[i]; i++; } } } void mergeSort(int arr[],int begin,int end){ int mid; if( (3) ){ mid=(begin+end)/2; mergeSort(arr,begin,mid); (4) ; merge(arr,begin,mid,end); } }

【问题1】 根据以上说明和C代码,填充1-4。 【问题2】 根据题干说明和以上C代码,算法采用了(5)算法设计策略。 分析时间复杂度时,列出其递归式位(6),解出渐进时间复杂度为(7)(用O符号表示)。空间复杂度为(8)(用O符号表示)。 【问题3】 两个长度分别为n1和n2的已经排好序的子数组进行归并,根据上述C代码,则元素之间比较次数为(9)。

点击查看答案

第10题

下列程序的功能是输出数组中的最大值,其中用指针q指向该元素,在if语句中判断表达式应该是 ______。 #include<iostream.h> void main(){ int a[10]={6,7,2,9,1,10,5,8,4,3); int *p=a,*q=a; while(p-a<10){ if(_____)q=p; { p++; } cout<<”max=”<<*q; }

A.ap>Aq

B.*p>*q

C.p>q

D.p-a>p-q

点击查看答案
热门考试 全部 >
相关试卷 全部 >
账号:
你好,尊敬的上学吧用户
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改
谢谢您的反馈

您认为本题答案有误,我们将认真、仔细核查,
如果您知道正确答案,欢迎您来纠错

警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

微信搜一搜
上学吧
点击打开微信
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反上学吧购买须知被冻结。您可在“上学吧”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
微信搜一搜
上学吧
点击打开微信