欢迎来到天天文库
浏览记录
ID:51707236
大小:39.95 KB
页数:4页
时间:2020-03-15
《数据结构编程题汇总.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2.11StatusInsert_SqList(SqList&va,intx)//把x插入递增有序表va中{ if(va.length+1>va.listsize)returnERROR; va.length++; for(i=va.length-1;va.elem[i]>x&&i>=0;i--) va.elem[i+1]=va.elem[i]; va.elem[i+1]=x; returnOK;}//Insert_SqList2.19StatusDelete_Between(Linklist&L,intmink,i
2、ntmaxk)//删除元素递增排列的链表L中值大于mink且小于maxk的所有元素{ p=L; while(p->next->data<=mink)p=p->next;//p是最后一个不大于mink的元素 if(p->next) //如果还有比mink更大的元素 { q=p->next; while(q->datanext;//q是第一个不小于maxk的元素 p->next=q; }}//Delete_Between2.21voidreverse(SqList&A)//顺序表的
3、就地逆置{ for(i=1,j=A.length;iA.elem[j];}//reverse2.22voidLinkList_reverse(Linklist&L)//链表的就地逆置;为简化算法,假设表长大于2{ p=L->next;q=p->next;s=q->next;p->next=NULL; while(s->next) { q->next=p;p=q; q=s;s=s->next;//把L的元素逐个插入新表表头 } q->next=p;s->ne
4、xt=q;L->next=s;}//LinkList_reverse分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.2.33StatusLinkList_Divide(LinkList&L,CiList&A,CiList&B,CiList&C)//把单链表L的元素按类型分为三个循环链表.CiList为带头结点的单循环链表类型.{ s=L->next; A=(CiList*)malloc(sizeof(CiLNode));p=A; B=(CiList*)malloc(sizeof(CiLNode));
5、q=B; C=(CiList*)malloc(sizeof(CiLNode));r=C;//建立头结点 while(s) { if(isalphabet(s->data)) { p->next=s;p=s; } elseif(isdigit(s->data)) { q->next=s;q=s; } else { r->next=s;r=s; } }//while p->next=A;q->next=B;r->next=C;//完成循环链表}
6、//LinkList_Divide2.38DuLNode*Locate_DuList(DuLinkedList&L,intx)//带freq域的双向循环链表上的查找{ p=L.next; while(p.data!=x&&p!=L)p=p->next; if(p==L)returnNULL;//没找到 p->freq++;q=p->pre; while(q->freq<=p->freq&&p!=L)q=q->pre;//查找插入位置 if(q!=p->pre) { p->pre->next=p->next;p->
7、next->pre=p->pre; q->next->pre=p;p->next=q->next; q->next=p;p->pre=q;//调整位置 } returnp;}//Locate_DuList3.19StatusAllBrackets_Test(char*str)//判别表达式中三种括号是否匹配{ InitStack(s); for(p=str;*p;p++) { if(*p=='('
8、
9、*p=='['
10、
11、*p=='{')push(s,*p); elseif(*p==')'
12、
13、*p=='
14、]'
15、
16、*p=='}') { if(StackEmpty(s))returnERROR; pop(s,c); if(*p==')'&&c!='(')returnERROR; if(*p==
此文档下载收益归作者所有