文档介绍:
《数据结构与算法》课后习题答案
课后习题解答
判定题
1.线性表的逻辑依次与存储依次总是相同的。〔×〕 2.依次存储的线性表可以按序号随机存取。〔√〕
3.依次表的插; i++; }
}
3.写一个算法,从一个给定的依次表A中删除值在x~y(xdata[i]是否介于x和y之间,假设是,并不马上删除,而是用n记录删除时应前移元素的位移量;假设不是,那么将A->data[i]向前移动n位。n用来记录当前已删除元素的个数。 void delete(Seqlist *A,int x,int y) {i=0; n=0;
while (ilast) {if (A->data[i]>=x && A->data[i]data[i] 介于x和y之间,n自增*/ else A->data[i-n]=A->data[i]; /*否那么向前移动A->data[i]*/ i++; }
A->last-=n; }
4.线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R中的字符按字母字符、数字字符和其它字符的依次排列。要求利用原来的存储空间,元素移动次数最小。
【提示】对线性表进展两次扫描,第一次将全部的字母放在前面,其次次将全部的数字放在字母之后,其它字符之前。 int fch(char c) /*判定c是否字母*/ {if(c>='a'&&c='A'&&c='0'&&cdata[k-1]=L->data[k]; L->data[L->last]=x; } else for(i=1;idata[L->last]; for(k=L->last-1;k>=0;k- -) L->data[k+1]=L->data[k];
L->data[0]=x; }
} 6.确定带头结点的单链表L中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表L中,使得L仍旧递增有序,并且分析算法的时间困难度。 LinkList insert(LinkList L, int x) {p=L; while(p->next && x>p->next->data) p=p->next; /*找寻插入位置*/ s=(LNode *)malloc(sizeof(LNode)); /*申请结点空间*/ s->data=x; /*填装结点*/ s->next=p->next; p->next=s; /*将结点插入到链表中*/ return(L);
}
7.假设有两个已排序〔递增〕的单链表A和B,编写算法将它们合并成一个链表C而不变更其排序性。
LinkList Com