版本5和10间的区别 (跳过第5版)
于2006-03-21 14:36:31修订的的版本5
大小: 1019
编辑: czk
备注:
于2006-03-21 16:42:05修订的的版本10
大小: 1937
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
练习: = 练习参考答案 =
行号 3: 行号 3:
第一章 == 第一章 ==
行号 21: 行号 21:
第二章 == 第二章 ==
行号 37: 行号 37:

5. 编写一个算法,从顺序表中删除自第i个元素开始的k个元素
{{{#!cplusplus
/*删除顺序表list中从pos开始的num个元素*/
void delete_from_ith(seq_list *list, int pos, int num){
   int i;
   pos--; /*把元素的逻辑位置变成数组中的存放位置。逻辑位置从1开始,存放物理位置从0开始,两者差1*/
   for(i = pos+num; i < list->size; i++)
      list->elem[i-num] = list->elem[i];
}
}}}

6. 已知单链表中的元素递增排列,编写一个算法,删除链表内所有大于min小于max的元素。
{{{#!cplusplus
/**/
void delete_between_min_and_max(linklist list, int min, int max) {
   node *p, *q, *nextq;
   for(p = list; p->next->data < min; p = p->next)
      ;
   q = p->next;
   while(q!=NULL && q->data < max) {
      nextq = q->next;
      free(q);
      q=nextq;
   }
   p->next = q;
}
}}}

练习参考答案

1. 第一章

6. 编写算法,求一元多项式的值latex($$Pn(x)=a_0+a_1x+a_2x^2+...+a_nx^n$$)

   1 /*数组a指定多项式的各个系数,n指定多项式的最高次数,x指定自变量的值,返回多项式的值*/
   2 double p(double x, double a[], int n) {
   3    double result = 0.0;
   4    int i = 0;
   5    for(i = n; i >= 0; i--) {  //n+2次
   6       result *= x;            //n+1次
   7       result += a[i];         //n+1次
   8    }
   9 }

总计 = 3n+4次

2. 第二章

4. 已知顺序表L递增有序,写一个算法将X插入到线性表适当位置上,使顺序表仍然递增有序。

   1 /*顺序表list递增有序,insert_order将x插入到list当中使list仍然递增有序*/
   2 void insert_order(seq_list *list, ElemType x){
   3    int i, pos;
   4    for(i = 0; i < list->size; i++)
   5       if(list->elem[i] >= x)
   6          break;
   7    pos = i;
   8    for(i = list->size-1; i >= pos; i--)
   9       list->elem[i+1] = list->elem[i];
  10    list->elem[pos] = x;
  11 }

5. 编写一个算法,从顺序表中删除自第i个元素开始的k个元素

   1 /*删除顺序表list中从pos开始的num个元素*/
   2 void delete_from_ith(seq_list *list, int pos, int num){
   3    int i;
   4    pos--; /*把元素的逻辑位置变成数组中的存放位置。逻辑位置从1开始,存放物理位置从0开始,两者差1*/
   5    for(i = pos+num; i < list->size; i++)
   6       list->elem[i-num] = list->elem[i];
   7 }

6. 已知单链表中的元素递增排列,编写一个算法,删除链表内所有大于min小于max的元素。

   1 /**/
   2 void delete_between_min_and_max(linklist list, int min, int max) {
   3    node *p, *q, *nextq;
   4    for(p = list; p->next->data < min; p = p->next)
   5       ;
   6    q = p->next;
   7    while(q!=NULL && q->data < max) {
   8       nextq = q->next;
   9       free(q);
  10       q=nextq;
  11    }
  12    p->next = q;
  13 }

数据结构——C语言描述(耿国华) (2008-02-23 15:34:19由localhost编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.