广工数据结构参考答案全(anyview)分析 下载本文

广工数据结构anyview 80道上机题 1.

void Descend(int &x, int &y, int &z)

/* 按从大到小顺序返回x,y和z的值 */ {

int t; if(x

t=z; z=x; x=t; }

if(y

t=y; y=z; z=t; }

if(y>x) {

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

if(m==k-1) f=1; else f=0; return OK; }

a=(int*)malloc((m+1)*sizeof(int)); for(i=0;i

*/ a[k-1]=1; a[k]=1;

while(i<=m) {

a[i]=2*a[i-1]-a[i-k-1]; i++; }

f=a[m]; return OK; } 3.

void Scores(ResultType *result, ScoreType *score)

/* 求各校的男、女总分和团体总分, 并依次存入数组score */ /* 假设比赛结果已经储存在result[ ]数组中, */ /* 并以特殊记录 {\(域scorce=0)*/

/* 表示结束 */ {

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(j

j++;

p=p->next;

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;