}
程序输出的第一行是j=2 第二行是j=6 最后一行是j=10
三、完善程序
1.(2*3分=6分)以下min函数的功能是:在非空单向链表中查找结点数据域为最小的值,并作为函数返回值.链表如下.
head struct NODE{int data;NODE *next;}; int min(NODE *first) {
NODE *p; int m; p=first; m=p->data;
for(p=p->next;p!=NULL;p= p->next ) if(m> p->data )m=p->data;
return m; }
2.(3*2分=6分)以下程序求二维数组的平均值 float average(float (*p)[4],int n) {
float sum=0;
for(int i=0; i } return sum/(n*4); } void main( ) { float score[3][4]={{56,65,70,76},{89,97,52,81},{90,99,91,86}}; printf(”平均值=%f”,average(score, 3 )); } 3. (2*3.5分=7分)以下程序实现将以L为头指针的链表逆置(设结点个数n>2),即将链表头当链表尾,链表尾当链表头。如下图: A2 An 0 L A1 5 L An An-1 A1 0 提示:本算法的思想是,逐个地把L的当前结点q插入新的链表头部,p为新表表头. void reverse(NODE * L) { p=L->next; q=p->next; L->next=NULL ; while(q!=NULL) { p->next=L; L=p; p=q; q=q->next ; } p->next=L;L=p; } 4. (3*2分=6分) 以下程序实现链表L中删除第i个元素(设1≤i≤元素个数) void Delete(NODE *L,int i) {NODE *p,*q; if(i= =1) {q=L;L=L->next; } //删除第一个元素 else { p=L; while(--i>1) p=p->next ; q=p->next; p->next=q->next ; //删除第i个元素 } free(q) ; } 5. (4*2.5分=10分)设链表上结点的数据结构定义如下: struct PNODE{ int x; PNODE *next; }; 设已建立了一条链表,h为链表首指针。函数DelAdd的功能为:若链表上能找到结点的x值为value,则从链表上删除该结点(假设链表上各个结点值是 6 不同的);否则构造一个新结点,其x 的值为value,并将新结点插入链尾。该函数要返回链表的首指针。 PNODE *DelAdd(PNODE *h, int value) { PNODE *p1, *p2; int flag=0; //值为1时,表示已删除值为value的结点 p1=h; while(p1 && flag= =0) { if(p1->x= =value) { flag=1; if(p1= =h){h= p1->next ; free( p1); } else{p2->next= p1->next ; free( p1);} } else {p2=p1; p1= p1->next ;} } if(flag= =0) { p1= (PNODE *)malloc(sizeof (PNODE)); p1->x=value; p1->next=0; if(h= =0) h=p1; else p2->next =p1 ; } return h; } 7
相关推荐: