数据结构(C语言版)习题解答 下载本文

内容发布更新时间 : 2024/5/11 16:52:15星期一 下面是文章的全部内容请认真阅读。

1.3 设n是正整数。试写出下列程序段中用记号“△”标注的语句的频度: (2) i=1; k=0; do {

△ k+=10*i; i++;

}while(i<=n-1) 当n=1时,执行1;

当n>=2时,执行n-1次; (3) i=1; k=0; do {

△ k+ = 10*i; i++; }while(i==n); 当n=2时,执行2次; 当n!=2时,执行1次;

(4) i=1; j=0;

while(i+j≤n) {

△ if(i

x=n; y=0; //n是不小于1的常数 while(x>=(y+1)*(y+1)){ △ y++; }

向下取整) x=91; y=100; while ( y>0 )

△ if(x>100) { x-=10; y--; } }

else x++ ;

执行(6)

If语句执行100次 (7)

for( i=0; i

for( j=i; j

for( k=j; k

过程:??(n?j)?i?0j?in?1n?1n(n?1)(n?2) 6第二章

2.3 已知顺序表La中数据元素按非递减有序排列。试写一个算法,将元素x插到La的合适位置上,保持该表的有序性。

思路:先判断线性表的存储空间是否满,若满返回Error;否则从后向前先移动数据,找到合适的位置插入。

Status Insert_SqList(SqList &La,int x)//把x 插入递增有序表La 中 {

if(La.length==La.listsize) return ERROR; for(i=La.length-1;La.elem[i]>x&&i>=0;i--) La.elem[i+1]=La.elem[i]; La.elem[i+1]=x; La.length++; return OK; }//Insert_SqList

2.5 试写一个算法,实现顺序表的就地逆置,即在原表的存储空间将线性表(a1,a2, ..., an-1,an)逆置为(an,an-1, ..., a2,a1)

//思路就是两个指示变量i,j同时分别从顺序表的开始和结尾处相向改变 void reverse(SqList &A)//顺序表的就地逆置 {

ElemType p;

for(i=1,j=A.length;i

//A.elem[i]<->A.elem[j]; p=A.elem[i]; A.elem[i[=A.elem[j]; A.elem[j]=p; } }//reverse

2.7 已知线性表L采用顺序存储结构存放,对两种不同情况分别写出算法,删除L中多余的元素,使得L中没有重复元素:(1)L中数据元素无序排列;(2)L中数据元素非递减有序排列。

void Delete_SameElem(SqLink &L, int L.length){

//内层循环移动参数,中层循环寻找相同元,外层循环遍历整个表 int i=0; int j=i+1; int length=L.length; while(i

for(j=i+1;j

if(L.Elem[j]==L.Elem[i]){// for(k=j; k

j--;//移动元素后,由于少了一个元素,因此要减1

}

}//end if

If(L.Elem[j]>L.Elem[i]) break;//第二小问添加此句

}//end for }//end while }//end functoion

2.8 已知线性表L采用链式结构存放。对两种不同情况分别写出算法,删除L中值相同的多余元素,使得L中没有重复元素:(1)L中数据元素无序排列;(2)L中数据元素非递减有序排列。 (1)L中数据元素无序排列;

思路:由于是无序排列,需要线性表中每个元素都要相互进行比较。

Status ListDelete(Linklist &L)//L是带头结点的线性表 {

ElemType *p,*q;

p==L->next;q=p->next; //设定p变化较慢,q变化较快 while(p->next){ while(q) {

if(p->data!=q->data) q=q->next;

else{ q=q->next; p->next=q; }//else }//while

p=p->next;q=p->next;//开始后一结点的寻找