目前實現的所有操作如下圖所示:
學資料結構半個多月了,下面是整合的對單鏈表組的操作,測試了一下資料,應該沒問題。
以下是**:
#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的意義
頭指標就是指向鍊錶的首位址,返回首位址就可以對聯表進行相關操作,至於頭指標裡面有沒有值,看你自己放不放,無所謂的 返回了頭指標,就意味著返回了整個鍊錶,可以被其他地方使用了。頭指標一般資料域是沒值的,但是返回頭指標返回的是位址可不是資料域的值 單向鍊錶的頭指標永遠指向鍊錶的第乙個元素,不能指向其它的...