问答题

[说明] 链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下: typedef struct node { datatypedata; structnode *next; } QNode; /*链队结点的类型*/ typedef struct { QNnode *front,*rear; } LQueue; /*将头尾指针封装在一起的链队*/ 以下这种链队的几个例子:
设q是一个指向链队的指针,即LQueue *q。下面各函数的功能说明如下: (1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队; (2) intEmpty_LQueue( LQueue *q):判断链队q是否空; (3) void In_LQueue(LQueue *q, datatypex):将数据x压入链队q; (4) int Out_LQueue(LQuere *q, datatype *x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。 [函数] LQueae *Init_LQueue() { LQueue *q, *p; q=malloc(sizeof(LQueue)); /*申请链队指针*/ P=malloc(sized(QNode));/*申请头尾指针结点*/ p->next=NULL; (1) =p; return q; } int Empty_LQueue(LQueue *q) { if(q->front (2) q>rear) return 0; else return 1; } void In_LQueue(LQueue *q, datatype x) { QNoda *p; p=malloc(sizeof(QNnode));/*申请新接点*/ p->data=x; p->next=NULL; (3) =p; q->rear=p; } int Out_LQueue(LQueue *q, datatype *x) { QNnode *p; if(Empty_LQueue(q)) return 0; /*队空,操作失败*/ else{ p=q->front->next; *x= (4) ; (5) =p->next; free(p); if (q->front->next= =NULL)q->rear=q->front; return 1; } }

【参考答案】

(1) q->front=q->rear (2) = = (3)q-> rear->next (4) p->data (......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
[说明]函数encode()和decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:(1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中;(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为n,则将其后继字符重复复制n+1次到新字符串中;(4)以上述一次变换为一组,在不同组之间另插入一个下划线‘_’用于分隔。例如:encode()函数对字符中26a3t2的变换结果为666_a_tttt_2。函数decode()用于经函数encode()处理的字符中,即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。注:假定调用变换函数encode()时的原始字符串中不包含下划线字符。[函数]int encode(char *instr,char *outstr){ char *ip, *op,c;int k,n;ip=instr;op=outstr;while ( * ip) {if(*ip>=’0’&&*ip<=’9’&&*(ip+l)) {n=*ip-’0’+1;c= (1) ;for (k=0;k<n;k++) *op++=c;}else *op++=*ip;(2) ;ip++;}if (op>outstr) (3) ;*op=’ 0’;(4) ;}int decode(char *instr,char *outstr){ char *ip,*op,c;int n;ip=instr; op=outstr;while ( *ip) {c=*ip;n=0;while( *ip==c&&n<10) { (5) ; n++; }if(n>1) *op+ + =’0’+n-1;* op++=c;if(*ip==’_’) ip++;}*op=’ 0’;(4) ;}