如何实现!!!!!??????

[复制链接]
查看11 | 回复5 | 2021-1-27 06:56:28 | 显示全部楼层 |阅读模式
1.通过键盘输入数据实现循环链表的建立
2.输出循环链表节点的指针序列,要求先输出自身的指针,再输出其指向的节点的指针。如一个有五个节点的循环链表,各节点地址依次为3109,3290,3106,3595,3390,则输出应为:
3109
3290
3290
3106
3106
3595
3595
3390
3390
3109
3.对链表进行由大到小的排序,输出排序完成后的链表和链表的指针序列

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
//这是我以前写的约瑟夫环的部分代码;
structnode
{
intnum;
intsecret;
node*next;
};
//创建一个循环链表
node*cre(intn)
{node*p1,*p2,*p3;
node*l;
p2=p1=l=(node*)malloc(sizeof(node));//把第一个节点另外放出来。
intx;
cout>x;
p1->num=1;p1->secret=x;//信息输入;
for(inti=2;i>x;
p1->num=i;p1->secret=x;
p2->next=p1;
p2=p1;
}
p1->next=l;
returnl;
}
第二题:建立循环链表后再输出就简单了,只要令P指向头结点,输出P和P->NEXT就行了,然后令P指向P->NEXT;直到P->NEXT==头结点L;
第三题:排序,把第一个结点的数据当成一个有序序列,然后后面几个用插入排序
差不多就这样了吧,我也在学数据结构,不太会...


回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
如果一定要通过链表来实现,就按照ls说的就差不多了!
node.next=>下一个节点
最后一个节点的next指向头
排序需要先将环拆开,然后再排序。排序完了再将环闭合
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
前面两个问题,就用一楼的方法,就很好了
第3个问题,用插入排序也行,按2楼说的先拆分后排序的话,可以用归并排序法
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
数据结构上有类似的算法
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
数据结构上有类似的算法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行