第三章栈、队列和数组一、填空题:1.栈修改的原则是_先进后出________或称_后进先出_______,因此,栈又称为__后进先出______线性表。
在栈顶进行插入运算,被称为_进栈_______或_入栈_______,在栈顶进行删除运算,被称为_退栈_______或__出栈______。
二、对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“__下溢______”。
三、对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“__上溢1.______”。
四、一般地,栈和线性表类似有两种实现方法,即__顺序、1.______实现和__链接______实现。
2.top=0表示__栈空______,此时作退栈运算,则产生“__下溢______”;top=sqstack_maxsize-1表示__栈满______,此时作进栈运算,则产生“__上溢______”。
3.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq)1、 { _ sq->top=0_______;return(1);}4.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{___ sq->top++_____________:___ sq->data[sq->top]_____=x;return(1);}}5.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
Int Pop(SqStackTp *sq,DataType *x){if(sp->top==0){error(“下溢”);return(0);}else{*x=__ sq->data[sq->top]____;___ sq->top—___;return(1);}}9. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。
Int EmptyStack(SqStackTp *sq){if(__sq->top= =0____) return(1);else return(0);}10.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。
Int GetTop(SqStackTp *sq,DataType *x){if(__sq->top= =0___) return(0);else{*x=__ sq->data[sq->top]___;return(1);}}11. 以下运算实现在链栈上的初始化,请在________________处用请适当句子予以填充。
2、Void InitStacl(LstackTp *ls){ __ ls=NULL______________;}12.` 以下运算实现在链栈上的进栈,请在处用请适当句子予以填充。
Void Push(LStackTp *ls,DataType x){ LstackTp *p;p=malloc(sizeof(LstackTp));_____p->data=x___________;p->next=ls;______________ls=p__;}13.以下运算实现在链栈上的退栈,请在________________处用请适当句子予以填充。
Int Pop(LstackTp *ls,DataType *x){LstackTp *p;if(ls!=NULL){ p=ls;*x=__ p->data ___;ls=ls->next;3、 ___ free(p)_____;return(1);}else return(0);}14. 以下运算实现在链栈上读栈顶元素,请在________________处用请适当句子予以填充。
Int Get Top(LstackTp *ls,DataType *x)4、 { if(ls!=NULL){ _*x=ls->data.05、__;return(1);}else return(0);}15.队列简称________________。
在队列中,新插入的结点只能添加到________________,被删除的只能是排在________________的结点。
16.顺序队的出、入队操作会产生“________________”。
17.以下运算实现在循环队上的初始化,请在________________处用适当句子予以填充。
Void InitCycQueue(CycqueueTp *sq)6、 { __ sq->front=0______________;sq->rear=0;}18. 以下运算实现在循环队上的入队列,请在________________处用请适当句子予以填充。
Int EnCycQueue(CycquereTp *sq,DataType x){ if((sq->rear+1)%maxsize== ________________){error(“队满”);return(0);else{ ________________;________________ ________________;return(1);}19. 以下运算实现在循环队上的出队列,请在________________处用适当句子予以填充。
Int OutCycQueue(CycquereTp *sq,DataType *x){if(sq->front== ________________){error(“队空”);return(0);}else{ ________________;________________;return(1);}}20. 以下运算实现在循环队上判队空,请在________________处用适当句子予以填充。
Int EmptyCycQueue(CycqueueTp sq){if(________________) return(1);else return(0);}21. 以下运算实现在循环队上取队头,请在________________处用适当句子予以填充。
Int GetHead(CycqueueTp sq,DataType *x){ if(sq.rear== ________________return(0);else{ *x=sq.data[________________ ];return(1);}22.链队在一定范围内不会出现________________的情况。
当lq.front==lq.rear试,队中无元素,此时________________。
23.以下运算实现在链队上的初始化,请在________________处用适当句子予以填充。
void InitQueue(QueptrTp *lp){ LqueueTp *p;p=(LqueueTp *)malloc(sizeof(LqueueTp));________________;lq->rear=p;(lq->front)->next=________________;}24. 以下运算实现在链队上的入队列,请在________________处用适当句子予以填充。
Void EnQueue(QueptrTp *lq,DataType x){ LqueueTp *p;p=(LqueueTp *)malloc(sizeof(LqueueTp));________________=x;p->next=NULL;(lq->rear)->next=________________;________________;}25. 以下运算实现在链队上的出队列,请在________________处用适当句子予以填充。
int OutQueue(QuetrTp *lq,DataType *x){ LqueueTp *s;if(lq->front==lq->rear){erroe(“队空”);return(0);}else { s=(lq->front)->next;________________=s->data;(lq->front)->next=________________;if(s->next==NULL) lq->rear=lq->front;free(s);return(1);}}26. 以下运算实现在链队上判队空,请在________________处用适当句子予以填充int EmptyQueue(QueptrTp *lq){ if(________________) return(1);else return(0);}27. 以下运算实现在链队上读队头元素,请在________________处用适当句子予以填充。
Int GetHead(QueptrTp lq,DataType *x){ LqueueTp *p;if(lq.rear==lq.front) return(0);else{________________;________________ =p->data;return(1);} }。