單鏈表實現

2021-07-11 18:55:12 字數 4208 閱讀 2550

單鏈表:

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...