[问题] 请问双向链结的排序

楼主: hunkchen2016 (我的鸡巴女友)   2018-06-28 19:00:16
请问有强者可以帮我改个程式吗??
问题在于函式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
}
作者: stupid0319 (征女友)   2018-06-28 20:02:00
不就是最大值的节点记下来就好了= =第一次到最后一次都比对就知道最大最小值在哪了
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-29 00:31:00
主程式怪怪的,判断内存配置失败不该写在那,配完就要检查~再来你每次建node传的head不是真的head,不知为何要从上次的点开始找,但也没关系~你的creatnode,只有往小的一边比对并插入,大的就如法炮制,要往另一边比

Links booklink

Contact Us: admin [ a t ] ucptt.com