C語言 關於單鏈表的所有操作

2021-08-18 09:59:08 字數 2592 閱讀 5581

目前實現的所有操作如下圖所示:

學資料結構半個多月了,下面是整合的對單鏈表組的操作,測試了一下資料,應該沒問題。

以下是**:

#include#include#include#include#define maxnum 10

int cnt = 0;

typedef struct node node, *linklist;

//鍊錶的初始化操作

void init(linklist *l)

void initclear(linklist *l)

//進行當前鍊錶,鍊錶組的列印

void printcurrlist(linklist*l)

printf("\n");

}int printalllist(linklist*l)

index++;

} if (isdisplay)

return tag;

} else

}void createlist(linklist*l)

tail->next = 0;

}void createhead(linklist*l, int*a, int len)

}int getlen(linklist *l)

return cnt;

}int defaultl(linklist*l)

if (cnt > 9) cnt = 9;

return cnt;

}linklist getnode(linklist*l, int i)

if (!p || j > i)

return 0;//相當於return為空

return p;

}void swapnode(linklist*l, int a, int b)

else

else }}

void insertnode(linklist *l, int i, int data)

q = (linklist)malloc(sizeof(node));

q->data = data;

q->next = p->next;

p->next = q;

}void deletenode(linklist*l, int data)

if (!(p->next))

else

}void clearlist(linklist*l)

*l = 0;

}linklist getmidnode(linklist*l)

return s;

}//在排序中要保留結點的前驅部分,前驅部分不會隨著交換而改變

void bubblesort(linklist*l)

} }}void selectsort(linklist*l)

} cnt++; }}

void selectsort2(linklist *l)

} if (!start)

/*//教訓:此時要加else,如果是if語句的話就承接了上面的if語句,最終結果為整個鍊錶都為頭結點的值

if(start)

*/else

//將最小的那個結點從原煉表中移除掉

if (min == *l)

else

//free(min); //不要把原結點的空間釋放掉

} tail->next = 0;

*l = start;//為原鍊錶重新賦值

}void insertsort(linklist*l)

else }}

void insertordered(linklist*l, int data)

else

if (q == *l)

else }}

void printlist(linklist*l)

index++; }}

void combined(linklist*l, linklist*b)

linklist q = (*b)->next;

pre->next = q;

free(*b);

*b = 0;

//clearlist(b);//不要清除整個鍊錶,只清楚頭結點即可 }}

void reverselist(linklist*l)

p1->next = q;

//把預留的頭結點接到q上,這樣實現了出來頭結點以外其他結點的倒置

*l = p1;

}void clearalllist(linklist *l)

void menu()

int main() ;

int len = sizeof(a) / sizeof(int);

linklist l[maxnum] = ;

linklist templist;

int choice, num1, num2;

menu();

while (1)

} return 0;

}

關於單鏈表的幾種操作實現

注意 1.只要涉及對鍊錶指標進行操作,一定要注意出錯 特殊情況的判斷 包括在函式的入口處 通過呼叫函式獲取結果時 否則極容易造成訪問越界 2.鍊錶的刪除clearlist是否可以像陣列一樣一次性刪除一段連續空間?不行,除非靜態鍊錶 include using namespace std 定義乙個鍊錶...

關於單鏈表的逆序

昨天的課後習題出現了乙個單鏈表的逆序問題,作為乙個志在成為程式媛的我,寫了我人生中的第一篇部落格。題目要求是 逆轉鍊錶,並返回逆轉後的頭結點。我們先考慮一下對於鍊錶逆序時可能會出現的情況 對於乙個空鍊錶 很明顯沒有資料,沒有內容,不需要逆序,之前return 對於只有乙個節點的鍊錶我們也是不需要考慮...

關於單鏈表函式操作中return head的意義

頭指標就是指向鍊錶的首位址,返回首位址就可以對聯表進行相關操作,至於頭指標裡面有沒有值,看你自己放不放,無所謂的 返回了頭指標,就意味著返回了整個鍊錶,可以被其他地方使用了。頭指標一般資料域是沒值的,但是返回頭指標返回的是位址可不是資料域的值 單向鍊錶的頭指標永遠指向鍊錶的第乙個元素,不能指向其它的...