作业帮 > 综合 > 作业

2.(10分)设有一个带头结点,由正整数组成的无序单链表,头指针为L.整个问题如下

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/11 11:21:29
2.(10分)设有一个带头结点,由正整数组成的无序单链表,头指针为L.整个问题如下
2.(10分)设有一个带头结点,由正整数组成的无序单链表,头指针为L,
Typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
Linklist L;
给出完成下列功能的算法并分析算法时间复杂度:
①找出最小值结点,且打印该数值;
②若该数值是奇数,则将其与直接后继结点(若存在)的数值交换;
③若该数值是偶数,则将其直接后继结点(若存在)删除;
数据结构问题,用C解决
#include
#include
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
Linklist L;
Linklist ListInit(Linklist Head, int n)
{
Linklist p;
int i;
for(i = 0; i < n; i ++)
{
p = (Linklist)malloc(sizeof(Lnode));
p->next = Head;
Head = p;
}
return Head;
}
Linklist ListReleas(Linklist Head)
{
Linklist p = Head;
while(Head)
{
p = Head;
Head=p->next;
free(p);
}
return Head;
}
int main()
{
Linklist Head = NULL, p = NULL, q = NULL;
int count[3] = {0}, n, inum;
printf("输入节点数:");
scanf("%d", &n);
Head = ListInit(Head, n);
printf("输入每个节点值(共%d个):\n", n);
p = Head;
while( p != NULL )
{
scanf("%d", &p->data);
p = p->next;
}
//找出最小值
q = Head;
p = Head;
while( p != NULL )
{
if(p->data < q->data)
q = p;
p = p->next;
}
printf("最小值为:%d\n",q->data);
//以下为第一次输出
p = Head;
while( p != NULL )
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
//奇偶判断并进行处理
if(q->data % 2)
{
if(q->next)
{
inum = q->data;
q->data = q->next->data;
q->next->data = inum;
}
}
else
{
while(q->next)
{
p = q->next;
q->next = p->next;
free(p);
}
}
//以下为修改后输出
p = Head;
while( p != NULL )
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
ListReleas(Head);
return 0;
}