單鏈表:
1、邏輯上連續,位置上可以不連續的儲存方式。
2、單鏈表由無數個結點組成,每個結點由資料段和指標域組成,資料段儲存資料,指標域儲存後繼的位址。
3、每個結點最多有乙個前繼和乙個後繼。
4、其中第乙個結點沒有前繼,所以我們通常建立乙個頭結點來儲存他的位置,其中頭結點的資料段我們不關注。
5、最後乙個結點沒有後繼,所以我們將最後乙個結點的指標域賦為null.
//函式宣告:"linklist.h"
#define _crt_secure_no_warnings 1
#include#includetypedef int elemtype;
typedef struct linknode
node;
void judgement_memory(node * p); //判斷動態記憶體是否開闢成功
node* creat_order(); //正向建立鍊錶,尾插法
node * creat_reverse(); //反向建立鍊錶,頭插法
void insert(node *head, int i, elemtype x); //在i位置上插入值為x的結點
void delete_place(node *head, int i); //刪除i結點
int delete_element(node *head, elemtype const x); //刪除第乙個值為x的結點
void delete_all_element(node *ret, elemtype x); //刪除所有值為x的結點
void find_element(node *head, elemtype const x); //尋找所有值為x的結點位置
void find_place(node *head, int i); //尋找i結點上的元素
void length_list(node *head);
void output(node *head); //列印鍊錶
node* inits_linklist(node *head); //釋放鍊錶
void sortrank(node *head); //對鍊錶進行排序
int means();
//函式實現:"linklist.c"
#include"linklist.h"
void judgement_memory(node * p) //判斷開闢記憶體是否成功
}node* creat_order() //建立乙個具有頭結點單鏈表,順序插入(尾插法)
else
break;
} r->next = null;
printf("建立成功\n");
return head;
}node * creat_reverse() //建立乙個具有頭結點的單鏈表,逆序輸入(頭插法)
else
break;
} printf("建立成功\n");
return head;
}void insert(node *head, int i, elemtype x) //插入乙個結點
if (null != head&&i!=0) //判斷是不是頭結點和結點是否存在
else
printf("結點不存在\n");
}void delete_place(node *head, int i) //刪除鍊錶中乙個指定位置的結點
else
if (null == head||i==0)
printf("沒有該位置\n");
else
}}int delete_element(node *head, elemtype const x) //刪除鍊錶中乙個指定的x元素
else
if (null == head) //沒找到返回 0
return 0;
else
}return 1; //刪除成功返回1
}void delete_all_element(node *ret, elemtype x) //根據元素刪除,將這個鍊錶裡面的這個元素的結點全部刪除
if (m == 0)
else
printf("鍊錶下溢\n");
}void find_element(node *head, elemtype const x) //通過元素查詢鍊錶中該元素的位置找到返回結點
head = head->next;
} if (i == 0) //如果沒有輸出count,說明沒有x,所以i==0;
printf("查詢無果\n");
else
printf("\n");
}void find_place(node *head, int i) //通過位置來查詢該鍊錶中位於此位置的元素
if (i == 1)
printf("結點元素:%d\n", head->data);
else
printf("查詢無果\n");
}void length_list(node *head) //求鍊錶長度
printf("鍊錶長度:%d\n", count);
}void output(node *head) //列印鍊錶
printf("\n");
}node* inits_linklist(node *head) //初始化鍊錶
head = null;
p = null;
printf("初始化成功\n");
return head;
}void sortrank(node *head) //對鍊錶進行排序
r = r->next;
} p = p->next;
} printf("排序成功\n");
}int means() //選擇方式
return means;
}//函式測試:
#include"linklist.h"
int main()
if (n == 1 && ret == null)
else if (n != 1&& ret == null) //必須先建立鍊錶,才能進行其他操作
printf("請建立鍊錶\n");
else if (ret!=null&&n!=1)
else
}break;
case 4: //選擇根據位置刪除還是根據元素刪除
else
}break;
case 5:
length_list(ret);
break;
case 6: //列印鍊錶
output(ret);
break;
case 7: //初始化鍊錶,將鍊錶制為空
ret = inits_linklist(ret);
break;
case 8:
sortrank(ret);
break;
default:
printf("選擇無效,請重新選擇\n");
break;
}}
} system("pause");
return 0;
}
單鏈表實現
include include define max 50 struct lnode 求鍊錶的長度 不包含頭結點 int length struct lnode node return i 初始化頭 int inithead struct lnode p struct lnode insert st...
單鏈表的實現
include includetypedef struct node 定義鍊錶 snode snode creat 建立鍊錶的函式 q next null return head int length snode head 測鍊錶的結點數 return i void display snode he...
單鏈表的實現
單鏈表夜市線性表的一種表現形式,乙個表節點由乙個資料空間和乙個指標域組成。指標域記錄下乙個結點的位址。鍊錶在插入,刪除功能中效率高。但是讀取某個結點的時候需要順序讀取。效率不如順序儲存形式。下面是一些鍊錶實現的 鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h define...