.
广工anyview数据结构习题第三章,
在学习过程中部分题目参考了Giyn 、戮漠、雁过留痕等大佬的代码,在此感谢。
题目解法不是最优解,但希望能给大家有所启发。同时也发了文档资源,需要可自取。
如果对你有帮助,可以给卑微的博主留个赞、关注、收藏 (不是)
(骗一下数据,说不定以后面试就过了,拜谢)
目录
DC03PE03
【题目】试以顺序表L的L.rcd[L.length+1]作为监视哨,改写教材3.2节中给出的升序直接插入排序算法。顺序表的类型RcdSqList定义如下∶
typedef struct {
KeyType key;
.....
}RcdType;
typedef struct {
RcdType rcd[MAXSIZE+1];// rcd[0]闲置
int length;
}RcdSqList;
实现下列函数∶
void InsertSort(RcdSqList &L);
#include "allinclude.h" //DO NOT edit this line
void InsertSort(RcdSqList &L)
{ // Add your code here
int i,j;
for(i=1;i<L.length;i++)
{
if(L.rcd[i+1].key<L.rcd[i].key)
{
L.rcd[L.length+1].key=L.rcd[i+1].key;
j=i+1;
do{
j--;
L.rcd[j+1].key=L.rcd[j].key;
}
while(L.rcd[L.length+1].key<L.rcd[j-1].key);
L.rcd[j].key=L.rcd[L.length+1].key;
}
}
}
DC03PE06
【题目】如下所述,改写教材1.5节的冒泡排序算法∶将算法中起控制作用的布尔变量change改为一个整型变量,指示每一趟排序中进行交换的最后一个记录的位置,并以它作为下一趟起泡排序循环终止的控制值。顺序表的类型RcdSqList定义如下∶
typedef struct {
KeyType key;
.....
}RCdType;
typedef struct {
RcdType rcd[MAXSIZE+1];// rcd[0] 闲置
int length;
}RcdSqList;
实现下列函数∶
void BubbleSort(RcdSqList &L);
/* 元素比较和交换必须调用以下比较函数和交换函数∶*/
/* Status LT(RedType a,RedType b);比较∶"<" */
/* Status GT(RedType a,RedType b);比较∶">" */
/* void Swap(RedType &a,RedType &b);交换 */
比较函数和交换函数∶
Status LT(RedType a,RedType b); // 比较函数∶"<"
Status GT (RedType a, RedType b); //比较函数 :">"
void Swap(RedType &a,RedType &b); // 交换函数
#include "allinclude.h" //DO NOT edit this line
void BubbleSort(RcdSqList &L) {
/* 元素比较和交换必须调用以下比较函数和交换函数:*/
/* Status LT(RedType a, RedType b); 比较:"<" */
/* Status GT(RedType a, RedType b); 比较:">" */
/* void Swap(RedType &a, RedType &b); 交换 */
// Add your code here
int change,i,j;
int n = L.length;
change = 0;
for (i = n ; i > 1; --i)
{
if (change)
{
i = change;
change = 0;
}
for (j = 1; j < i ; j++)
{
if (GT(L.rcd[j], L.rcd[j+1]))
{
Swap(L.rcd[j],L.rcd[j+1]);
change = j;
}
}
if (change == 0)
break;
}
}
DC03PE23
【题目】已知记录序列L.rcd[1..L.length]中的关键字各不相同,可按如下所述实现计数排序∶另设数组c[1 ..n],对每个记录a[i],统计序列中关键字比它小的记录个数存于c[i],则c[i]=0的记录必为关键字最小的记录,然后依c[i]值的大小对序列中记录进行重新排列。试编写算法实现上述排序方法。顺序表的类型RcdSqList定义如下∶
typedef struct{
KeyType key;
...
}RcdType;
typedef struct {
RcdType rcd[MAXSIZE+1]; // rcd[0]闲置
int length;
}RcdSqList;
实现下列函数∶
void CountSort(RcdSqList &L);
/* 采用顺序表存储结构,在函数内自行定义计数数组c */
#include "allinclude.h" //DO NOT edit this line
void CountSort(RcdSqList &L) // 请自行定义计数数组c,用作排序辅助
{ // Add your code here
RcdType L0[MAXSIZE + 1];
int c[MAXSIZE + 1] = {0};
int n = L.length;
int i,j;
RcdType temp;
for (i = 1;i <= n;++i)
{
for (j = 1;j <= n;++j)
if (L.rcd[i].key > L.rcd[j].key)
c[i]++;
}
for (i = 1;i <= n; ++i)
{
L0[i] = L.rcd[i];
}
for (i = 1;i <= n; ++i)
{
L.rcd[c[i]+1] = L0[i];
}
}