1樓:問明
void link_order(stu *p_head)stu *pb, *pf, temp;
pf = p_head;
if(p_head == null) {//連結串列為空printf("needn't order.\n");
return ;
if(p_head->next == null) {//連結串列有1個節點
printf("only one print, needn't order.\n");
return ;
while(pf->next != null) {//以pf指向的節點為基準節點
pb = pf->next;//pb從基準點的下一個節點開始while(pb != null) {
if(pf->num > pb->num) {temp = *pf;
*pf = *pb;
*pb = temp;
temp.next = pf->next;
pf->next = pb->next;
pb->next = temp.next;
pb = pb->next;
pf = pf->next;
return ;
2樓:碧海風雲
可以用氣泡排序對連結串列進行排序操作。以下補充了sort函式,以及補充了程式完整執行所需的其他內容
#include
#include
typedef struct _item item;
typedef struct _node node, *list;
void initlist (list *l)
/*可以採用氣泡排序方法對連結串列進行排序*/
void sort(list l) }}
for (p=l->next; p!=null; p=p->next)
puts (p->item.name);
}int listinsertnode (list l, int i, struct _item *e)
if (!p || j>i-1) /* 插入位置不合理:i小於1或者大於表長 */
return 0;
/* 生成新結點,並插入l中 */
s = (list) malloc (sizeof (struct _node));
s->item = *e;
s->next = p->next;
p->next = s;
return 1;
}int main (void) ;
struct _item b = ;
struct _item c = ;
struct _item d = ;
list p;
initlist (&l);
listinsertnode (l, 1, &a);
listinsertnode (l, 1, &b);
listinsertnode (l, 1, &c);
listinsertnode (l, 1, &d);
puts ("排序前連結串列:");
for (p=l->next; p!=null; p=p->next)
puts (p->item.name);
putchar ('\n');
puts ("排序後連結串列:");
sort (l);
}執行結果
3樓:匿名使用者
#include
#include
struct node ;
struct node *creat(int n)//建立連結串列p2->next=null;
return list;
} sort(struct node *list)//連結串列排序,氣泡排序}}
return list;
}void print(struct node *list)}int main()
4樓:僧震博
比較節點內容,然後交換節點的指標就好了;因為單向,所以需要額外的指標來記錄上一個節點的位置
c語言單向連結串列排序如何實現?
5樓:匿名使用者
struct student* printf_sort(struct student *head)
else
}else//不需要交換,則p2、ptemp前進1位}pfinished=p2;}}
C語言連結串列列印
那要看你的adddata 是怎麼構造的。如果你一定要用程式裡這種方式呼叫,那就把head的指標傳到adddata裡,即adddata head 假設adddata本身沒問題,且裡面記憶體在堆裡分配,是放在這個函式裡用malloc之類分配的,裡面所有對head的操作都用 head 來表示。這樣,dis...
C語言氣泡排序問題,c語言氣泡排序問題!?
文文的鵬鵬 lz的排序方法是錯誤的。比如,輸入8 6 12 0,按照lz的演算法,最終的排序結果是6 8 12 0。lz的演算法只能保證每相鄰的兩個數小在前大在後,但整體結果並不是這樣,所以排序還是要雙重迴圈的。 排序方法挺多的,各有各的優缺點的,有些人只是習慣了用某一個而已。 哈哈,可以用選擇排序...
c語言選擇法排序,C語言選擇法排序
大野瘦子 include define m 5 void main int b m i,j,t,k for i 0 iscanf d b i for i 0 ifor k i,j i 1 jif b k k j if i k t b i b i b k b k t for i 0 iprintf d...