海纳百川,大道致远
时光荏苒,青春在这里生长,为了理想我们在这里摩拳擦掌,
岁月不居,梦想依旧灿烂,纯真的理想在这里放飞。
题目及要求:
设有一个由正整数组成的无序单链表,编写能够完成下列功能的算法:
找出最小值结点,且打印该数值。
若该数值是奇数,则将其与直接后继结点的数值交换。
若该数值是偶数时,则将其直接后继结点删除。
要求:判断奇数或者是偶数需另用函数实现(函数调用)。
存储结构:链表。
思路与分析
这道课设主要是运用了单链表,并且可以借助链表的知识点进行寻找。
无序可以使用随机数来处理;’
运用一个函数来调用判断是否为奇数或者偶数;
奇数:将前面的删除,然后插入到后面那一个位置;
偶数:将后面的直接删除。
函数的运用
需要运用的函数:
void Action(LinkNode*& list, int min, int n)
{
LinkNode* p = new LinkNode;
int i, count = 1;
int temp;
int k[MaxSize] = {
0 }; //将初始值赋值为0
p = list->next; //因为不能 int k[n];
for (i = 0; i < n; i++) //将最小值个数个赋值为1
{
k[i] = 1;
}
i = 0;
while (p != NULL) //将第i个最小值出现的位置用k[i]表示
{
if (p->data == min)
{
k[i] = count;
i++;
}
p = p->next;
count++;
}
if (min % 2 == 1) //这个数是奇数的情况
{
printf("该最小数%d为奇数,将其与其后的数值进行互换\n", min);
for (i = 0; i < n; i++)
{
ListDelete(list, k[i], temp);
ListInsert(list, k[i] + 1, min);
}
}
else //这个数是偶数的情况
{
printf("该最小数%d为偶数,将其后的数值删除\n", min);
for (i = 0; i < n; i++)
{
ListDelete(list, k[i] + 1, temp);
}
}
}
主函数
int main()
{
srand((unsigned int)time(NULL)); //随机数
int i; //用来计数
int min; //最小值的值
int count = 0; //标记最小值出现的次数
LinkNode* list; //初始化
InitList(list);
int temp; //中间变量
GetElem(list, 1, temp);
//随机数
ElemType a[MaxSize] &