作者hunkchen2016 (我的鸡巴女友)
看板C_and_CPP
标题[问题] 请问双向链结的排序
时间Thu Jun 28 19:00:16 2018
请问有强者可以帮我改个程式吗??
问题在於函式dlink createdlist2(dlink head,int value)
内容的部分该怎麽改,我才可以在主程式输入Data的时候
链结自动会找到适当的位置
这样只我走链结的时候直接显示大到小或小到大???
#include <stdio.h>
#include <stdlib.h>
struct dlist /* 双向串列结构宣告 */
{
int data; /* 节点资料 */
struct dlist *front; /* 指向下一节点的指标 */
struct dlist *back; /* 指向前一节点的指标 */
};
typedef struct dlist dnode; /* 双向串列新型态 */
typedef dnode *dlink; /* 双向串列指标新型态 */
/* 使用阵列值建立双向链结串列 */
/* 双向链结串列的显示 */
dlink createdlist2(dlink head,int value)
{
dlink new_node;
dlink current;
dlink prev;
prev=head;
if(head==NULL)
{
new_node = ( dlink ) malloc(sizeof(dnode));
new_node->data=value;
new_node->front=new_node;
new_node->back=new_node;
}
else
{
new_node = ( dlink ) malloc(sizeof(dnode));
new_node->data=value;
current=head->front;
while((current!=head) && (current->data>= new_node->data))
{
prev=current;
current=current->front;
}
new_node->front=current;
new_node->back=prev;
prev->front=new_node;
current->back=new_node;
}
return new_node;
}
int main(int argc, char **argv)
{
dlink head=NULL; /* 双向链结串列指标 */
dlink now = NULL;
dlink pre=NULL;
dlink temp=NULL;
dlink now1=NULL;
/* 目前节点指标 */
//int list[10] = {75,98,77,10,57,50,40,81,91,99}; /* 阵列内容 */
//int select; /* 选择项1,2或3 */
//head = createdlist(list,10); /* 建立双向链结串列 */
head=createdlist2(head,50);
now1 = head;
head=createdlist2(head,60);
head=createdlist2(head,40);
head=createdlist2(head,30);
head=createdlist2(head,90);
if ( head == NULL )
{
printf("记忆体配置失败! \n");
return 0 ;
}
while(now!=NULL)
{
printf("(%d)",now->data);
now=now->front;
}
return 0
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.230.54.135
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1530183619.A.517.html
1F:→ stupid0319: 不就是最大值的节点记下来就好了= = 06/28 20:02
2F:→ stupid0319: 第一次到最後一次都比对就知道最大最小值在哪了 06/28 20:03
3F:推 cphe: 主程式怪怪的,判断记忆体配置失败不该写在那,配完就要检查 06/29 00:31
4F:→ cphe: ~再来你每次建node传的head不是真的head,不知为何要从上 06/29 00:31
5F:→ cphe: 次的点开始找,但也没关系~你的creatnode,只有往小的一边 06/29 00:31
6F:→ cphe: 比对并插入,大的就如法炮制,要往另一边比 06/29 00:31