這個怎么搞啊,大佬求教
我是萌新
uj5u.com熱心網友回復:
建立鏈表,頭插法插入資料,
冒泡進行排序。
uj5u.com熱心網友回復:
簡單點的辦法那就另建一個鏈表,首先搜索原鏈表里的資料,最好把資料和位置都記錄下來,那么只需要挨個找到原鏈表的相應結點,復制一份接到新鏈表上,當然了有了資料直接按從小到大的順序創建一個新鏈表更快,實在不行就這么做正常的操作就直接修改原鏈表,排序和陣列是一樣的,你需要額外實作的是結點的交換、資料的查找
uj5u.com熱心網友回復:
研究幾天也沒
有木有別的方法
uj5u.com熱心網友回復:
就冒泡吧#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ListType { int n; struct ListType * next; } List;
// 創建一個帶有頭節點的單項鏈表
List * CreateList(int n, int * v) {
if (n<=0 ) return NULL;
List * pHead = (List*) malloc(sizeof(List));
List *p = pHead;
pHead->n = n; // 頭節點的n,用來記錄鏈表的長度了
while (n--) {
p->next = (List*) malloc(sizeof(List));
p->next->n = *v++;
p = p->next;
};
p->next = NULL;
return pHead;
};
void PrintList(List * pList) {
List * p = pList;
while (p->next) {
printf("%d ", p->next->n);
p = p->next;
}
printf("\n");
}
void SortList(List * pList) {
if ( NULL == pList) return ; // 空
if ( pList->n <2 ) return; // 只有一個或者是沒有,排個屁
int x=0;
while ( x < pList->n ) {
List * p = pList->next;
List * pNext = p->next;
while ( p && p->next ) {
if ( p->n > pNext->n) {
int t = p->n;
p->n = pNext->n;
pNext->n = t;
}
p = pNext; pNext=pNext->next;
}
x++;
}
}
int main() {
int init[] = {3, 8, 4, 7, 6, 2};
List * pList = CreateList(6,init);
PrintList(pList);
SortList(pList);
PrintList(pList);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137829.html
標籤:C語言
