[問題] 請問雙向鏈結的排序

作者: 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