首页 数据结构80题参考答案(上)1-40

数据结构80题参考答案(上)1-40

举报
开通vip

数据结构80题参考答案(上)1-40广工数据结构80道上机题 仅供参考 1. void Descend(int &x, int &y, int &z) /* 按从大到小顺序返回x,y和z的值 */ { int t; if(xx) { t=x; x=y; y=t; } } 2. Status Fibonacci(int k, int m, int &f) /* 求k阶斐波那契序列的第m项的值f */ { int *a; ...

数据结构80题参考答案(上)1-40
广工数据结构80道上机 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 仅供参考 1. void Descend(int &x, int &y, int &z) /* 按从大到小顺序返回x,y和z的值 */ { int t; if(xx) { t=x; x=y; y=t; } } 2. Status Fibonacci(int k, int m, int &f) /* 求k阶斐波那契序列的第m项的值f */ { int *a; int i=1; if(k<2||m<0) return ERROR; if(m 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示结束 */ { int i; for(i=0;result[i].score!=0;i++) { score[result[i].schoolname-'A'].totalscore+=result[i].score; if(result[i].gender==male) score[result[i].schoolname-'A'].malescore+=result[i].score; else score[result[i].schoolname-'A'].femalescore+=result[i].score; } } 4 Status Series(int ARRSIZE, int a[]) /* 求i!*2^i序列的值并依次存入长度为ARRSIZE的数组a; */ /* 若所有值均不超过MAXINT,则返回OK,否则返回OVERFLOW */ { int i=1,b=1,na=1; while(i<=ARRSIZE) { na*=i;b*=2; if(na*b>MAXINT) return OVERFLOW; a[i-1]=na*b; i++; if(i>ARRSIZE+1) return OVERFLOW; } return OK; } 5 float Polynomial(int n, int a[], float x) /* 求一元多项式的值P(x)。 */ /* 数组a的元素a[i]为i次项的系数,i=0,...,n */ { float ans=a[0],t=1.0; int i=1; while(i<=n) { t*=x; ans+=(t*a[i]); i++; } return ans; } 6 void InsertOrderList(SqList &L, ElemType x) // 在有序的顺序表 L 中保序插入数据元素 x { int i=L.length-1; while(L.elem[i]>x) { L.elem[i+1]=L.elem[i]; i--; } L.elem[i+1]=x; L.length++; } 7 char Compare(SqList A, SqList B) // 比较顺序表A和B, // 返回'<', 若A', 若A>B { int i=0; while(A.elem[i]==B.elem[i]&&i'; return '<'; } 8 LinkList Locate(LinkList &L, ElemType x) // If 'x' in the linked list whose head node is pointed // by 'L', then return pointer ha pointing node 'x', // otherwise return 'NULL' { LinkList p; p=L->next;//第一个元素 while(p->next!=NULL) { if(p->data==x) return p; p=p->next; } return NULL; } 9 int Length(LinkList L) // Return the length of the linked list // whose head node is pointed by 'L' { int i=0; while(L->next!=NULL) { i++; L=L->next; } return i; } 10 void Insert(LinkList &L, int i, ElemType b) { int j=1; if(i==0) return ; LinkList p,q; q=L; p=(LinkList)malloc(sizeof(LNode)); p->data=b; if(i==1) { p->next=L; L=p; } else { while(jnext!=NULL) { j++; q=q->next; } if(jnext=q->next; q->next=p; } } 11 void Delete(LinkList &L, int i) { int j=1; LinkList p,q; p=L; if(i==0) return ; if(i==1) { L=L->next; return; } while(jnext; if(p->next==NULL) return; } q=p; p=p->next; q->next=p->next; free(p); } 12 void Purge(LinkList &L) { LinkList cur,temp,del;//cur当前结点,temp遍历下一个结点,del删除结点 cur=L->next; temp=cur->next; if(cur==NULL||temp==NULL) return;//空或者只有一个元素,返回 while(cur->next) { temp=cur->next; while(temp) { if(cur->data==temp->data) { del=temp; temp=temp->next;//temp指向下一个元素 cur->next=temp; //删除后连接 free(del); } else temp=temp->next; } cur=cur->next; } }//时间复杂度O(n*n) 13 void Inverse(SqList &L) { int i=0; ElemType t; while(inext; p=p->next; L->next->next=NULL; if(!p) return ; while(p) { k=q; q=p; p=p->next; q->next=k; } L->next=q; } 15 void Merge(LinkList ha, LinkList hb, LinkList &hc) /* 依题意,合并带头结点的单链表ha和hb为hc */ { LinkList pa,pb,pc; hc=ha; pc=hc; pa=ha->next; pb=hb->next; if(!pa) {hc=hb;return;} if(!pb) {hc=ha;return;} while(pa||pb) { pc->next=pa; if(!pb) {return;} pc=pc->next; pa=pa->next; pc->next=pb; if(!pa) {return;} pb=pb->next; pc=pc->next; } } 16 void Union(LinkList &lc, LinkList &la, LinkList &lb) { LinkList pa,pb,pc; pa=la->next;pb=lb->next; //合并 lc=pc=la; while(pa&&pb) { if(pa->data <= pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa ? pa : pb; pa=pb=lc->next; //逆置 pa=pa->next; lc->next->next=NULL; if(!pa) return ; while(pa) { pc=pb; pb=pa; pa=pa->next; pb->next=pc; } lc->next=pb; } 17 ElemType DeleteNode(LinkList s) /* 删除指针s所指结点的前驱结点,并返回被删结点的元素值 */ { LinkList p; ElemType a; p=s->next; while(p->next->next!=s) p=p->next; a=p->next->data; p->next=s; return a; } 18 void PerfectBiLink(BiLinkList &CL) { BiLinkList pre,net,t; pre=t=CL; net=t->next; while(net!=t) { net->prev=pre; pre=net; net=net->next; } t->prev=pre; } 19 void Split(LinkList &lc, LinkList &ld, LinkList &lo, LinkList ll) { LinkList itor,pc,pd,po; itor=ll->next; lc=(LinkList)malloc(sizeof(LNode));pc=lc; ld=(LinkList)malloc(sizeof(LNode));pd=ld; lo=(LinkList)malloc(sizeof(LNode));po=lo; while(itor) { if(itor->data>='a'&&itor->data<='z'||itor->data>='A'&&itor->data<='Z') { pc->next=itor; pc=itor; } else if(itor->data<='9'&&itor->data>='0') { pd->next=itor; pd=itor; } else { po->next=itor; po=itor; } itor=itor->next; } pc->next=lc; pd->next=ld; po->next=lo; } 20 void ReverseEven(BiLinkList &L) { BiLinkList p1,p2; p1=L->next;p2=L; while(p1->next!=L) { if(p1->next->next!=L) { p1->next=p1->next->next;//接隔一个 p1=p1->next;//去到隔一个处 p2->prev=p1->prev;//p2的前驱为p1前驱 p1->prev=p1->prev->prev; p2->prev->next=p2;//p1的前驱的后继为p2 p2=p2->prev;//p2去到p2前驱 } else { p2->prev=p1->next; p1->next->next=p2; p2=p2->prev; break; } } p1->next=p2; p2->prev=p1; } 21 float Evaluate(SqPoly pn, float x) /* pn.data[i].coef 存放ai, */ /* pn.data[i].exp存放ei (i=1,2,...,m) */ /* 本算法计算并返回多项式的值。不判别溢出。 */ /* 入口时要求0≤e1 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 ,并释放无用结点 */ { PolyLink p; p=pa->next; while(p!=pa) { if(p->exp==0) { pa->next=p->next; free(p); p=pa->next; } else { p->coef *= p->exp; p->exp--; p=p->next; } } } 23 Status match(char *str) /* 若str是属该模式的字符序列,*/ /* 则返回TRUE,否则返回FALSE */ { Stack s; InitStack(s); SElemType e; int i=0; while(str[i]!='&') { Push(s,str[i]); i++; } i++; while(str[i]!='@') { GetTop(s,e); if(StackEmpty(s)||e!=str[i]) return FALSE; Pop(s,e); i++; } if(!StackEmpty(s)) return FALSE; return TRUE; } 24 Status MatchCheck(SqList exp) /* 顺序表exp表示表达式; */ /* 若exp中的括号配对,则返回TRUE,否则返回FALSE */ /* 注:本函数不使用栈 */ { int i=0,count=0; while(i=1&&i0+dx[i]>=1&&g[i0+dx[i]][j0+dy[i]]==color) ChangeColor(g,m,n,c,i0+dx[i],j0+dy[i]); } } 27 char *RPExpression(char *e) /* 返回表达式e的逆波兰式 */ { int i,j=0; char *str; str=(char*)malloc(30*sizeof(char)); SElemType e1; Stack so; for(i=0;e[i]!='\0';i++) { if(e[i]<='9'&&e[i]>='0'||e[i]>='a'&&e[i]<='z'||e[i]>='A'&&e[i]<='Z')//入数字栈 { str[j++]=e[i]; } else { if(e[i]=='('||e[i]=='['||StackEmpty(so))//入栈 Push(so,e[i]); else if(e[i]==')') { while(Top(so)!='(')//将()内的操作符做运算 { str[j++]=Top(so);//操作符入栈 Pop(so,e1); } Pop(so,e1); } else if(e[i]==']') { while(Top(so)!='[') { str[j++]=Top(so); Pop(so,e1); } Pop(so,e1); } else if(e[i]=='+'||e[i]=='-') { while(Top(so)=='*'||Top(so)=='/'||Top(so)=='+'||Top(so)=='-')//优先计算 { str[j++]=Top(so); Pop(so,e1); } Push(so,e[i]); } else if(e[i]=='*'||e[i]=='/') { while(Top(so)=='*'||Top(so)=='/') { str[j++]=Top(so); Pop(so,e1); } Push(so,e[i]); } } } while(!StackEmpty(so)) { str[j++]=Top(so); Pop(so,e1); } str[j]='\0'; return str; } 28 int G(int m, int n) /* if m<0 or n<0 then return -1. */ { if(m<0||n<0) return -1; if(m==0&&n>=0) return 0; if(m>0&&n>=0) return G(m-1,2*n)+n; } 29 int F(int n) /* if n<0 then return -1. */ { if(n<0) return -1; if(n==0) return n+1; if(n>0) return n*F(n/2); } 30 Status InitCLQueue(CLQueue &rear) { rear=(LinkList)malloc(sizeof(LNode)); if(!rear) exit(0); rear->next=rear; return 1; } Status EnCLQueue(CLQueue &rear, ElemType x) { LinkList p; p=(LinkList)malloc(sizeof(LNode)); if(!p) exit(0); p->data=x; p->next=rear->next; rear->next=p; rear=p; return 1; } Status DeCLQueue(CLQueue &rear, ElemType &x) { LinkList p; p=(LinkList)malloc(sizeof(LNode)); if(!p) exit(0); if(rear==rear->next) return 0; p=rear->next->next; x=p->data; rear->next->next=p->next; free(p); return 1; } 31 Status EnCQueue(CTagQueue &Q, QElemType x) { if(Q.front==Q.rear&&Q.tag) return 0; Q.elem[Q.rear]=x; Q.rear=(Q.rear+1)%MAXSIZE; return 1; } Status DeCQueue(CTagQueue &Q, QElemType &x) { if(Q.front==Q.rear&&!Q.tag) return 0; x=Q.elem[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return 1; } 32 Status EnCQueue(CLenQueue &Q, QElemType x) { if(Q.length==MAXQSIZE) return ERROR; Q.rear=(Q.rear+1)%MAXQSIZE;//队尾下一个空位置 Q.elem[Q.rear]=x; Q.length++; return 1; } Status DeCQueue(CLenQueue &Q, QElemType &x) { if(Q.length==0) return ERROR; x=Q.elem[(MAXQSIZE+Q.rear-Q.length+1)%MAXQSIZE]; Q.length--; return 1; } 33 Status Palindrome(char *word) /* 利用栈和队列判定字符序列word是否是回文 */ { Stack s; Queue que; InitStack(s);InitStack(que); char a,b; int i=0; while(word[i]!='@') { Push(s,word[i]); EnQueue(que,word[i]); i++; } while(!StackEmpty(s)&&!QueueEmpty(que)) { Pop(s,a); DeQueue(que,b); if(a!=b) return ERROR; } return 1; } 34 void Reverse(StringType &s) /* Reverse s by iteration. */ { StringType st; InitStr(st); int i,len; len=StrLength(s); for(i=len;i>0;i--) Concat(st,SubString(s,i,1)); StrAssign(s,st); } 35 void Replace(StringType &S, StringType T, StringType V) /* 以串 v 置换串 s 中出现的所有和串 t 相同的非空串 */ { int i=1; StringType st,ss,sm; InitStr(st);InitStr(ss);InitStr(sm); while(i<=StrLength(S)) { ss=SubString(S,i,StrLength(T)); if(StrCompare(ss,T)==0) {//剪断再接合 sm=SubString(S,1,i-1); //前半段 st=SubString(S,i+StrLength(T),StrLength(S)-i);//后半段 StrAssign(S,sm); Concat(S,V); Concat(S,st); //接完后还原S i+=StrLength(V)-1;//i移动到I+V的距离 } else i++; } } 36 void DelSubString(StringType &scrStr, StringType subStr) /* Remove all substring matching 'subStr' from 'scrStr'. */ { int i=1; StringType sp,sn,st; InitStr(sp);InitStr(sn);InitStr(st); while(i<=StrLength(scrStr)) { st=SubString(scrStr,i,StrLength(subStr)); if(StrCompare(st,subStr)==0) { sp=SubString(scrStr,1,i-1);//前半段 sn=SubString(scrStr,i+StrLength(subStr),StrLength(scrStr)-i);//后半段 StrAssign(scrStr,sp); Concat(scrStr,sn); i--; } i++; } } 37 Status Replace(SString& s, SString t, SString v) /* 用串v替换串s中所有和串t匹配的子串。 */ /* 若有与t匹配的子串被替换,则返回TRUE;*/ /* 否则返回FALSE */ { int i=1,j,tot=0,k=0; SString str; while(i<=s[0]) { j=1; while(j<=t[0]) { if(t[j]!=s[i+j-1]) break; j++; } if(j>t[0]) { tot=1; for(j=1;j<=v[0];j++) str[++k]=v[j]; i=i+t[0]; } else { str[++k]=s[i]; i++; } } for(i=1;i<=k;i++) s[i]=str[i]; s[0]=k; if(tot) return TRUE; return FALSE; } 38 Status DelSub(SString &s, SString t) /* 从串s中删除所有和串t匹配的子串。 */ /* 若有与t匹配的子串被删除,则返回TRUE;*/ /* 否则返回FALSE */ { int i=1,j,tot=0; while(i<=s[0]) { j=1; while(j<=t[0]) { if(s[i+j-1]!=t[j]) break; j++; } if(j>t[0]) { tot=1; for(j=i+t[0];j<=s[0];j++) s[j-t[0]]=s[j]; s[j-t[0]]='\0'; s[0]-=t[0]; } else i++; } if(tot) return TRUE; return FALSE; } 39 Status Concat(HString &S, HString S1, HString S2) /* 用S返回由S1和S2联接而成的新串 */ { int i; if(S.ch) free(S.ch); S.ch=(char*)realloc(S.ch,(S1.length+S2.length)*sizeof(char)); for(i=0;i
本文档为【数据结构80题参考答案(上)1-40】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_667597
暂无简介~
格式:doc
大小:105KB
软件:Word
页数:20
分类:互联网
上传时间:2012-06-09
浏览量:13