鍊錶的基本操作 C

2021-09-10 14:40:55 字數 2908 閱讀 5473

#define  _crt_secure_no_warnings

#include#include#include#include#include#include "linklist.h"

//初始化鍊錶

struct linknode * init_linklist()//pheader頭指標用來返回首位置 ptail中間變數用來遍歷資料 newnode資料

//ptail = pheader ptail->next(引到當前資料位址) = newnode(資料位址) ptail移位為newnode ptail = newnode newnode 資料有鍵盤輸入 位址初始null 精闢總結!

; int *p = arr;

printf("鍊錶初始化固定數開始\n");

//for (int i = 0; i < 3; i++)

// // //創立新節點

// struct linknode * newnode = malloc(sizeof(struct linknode));

// newnode->num = *p;

// newnode->next = null;

// p++;

// //建立關係

// ptail->next = newnode;

// //更新新的尾節點

// ptail = newnode;

//}//while 迴圈備份***

//while (1)

// // //創立新節點

// struct linknode * newnode = malloc(sizeof(struct linknode));

// newnode->num = *p;

// newnode->next = null;

// p++;

// //建立關係

// ptail->next = newnode;

// //更新新的尾節點

// ptail = newnode;

//}//for迴圈固定輸入三個資料10 20 30

//創立新節點

//struct linknode * newnode = malloc(5*sizeof(struct linknode)); //迴圈外需要一次性將空間都建立夠***

//int const arr[3] = ;

//int * p = arr;

for (int i = 0; i < 5; i++)

//pcurrent->next = null;

return pheader;

}//遍歷鍊錶 for輸出

void foreach_linklist(struct linknode * pheader)

//pcurrent 起始指向的是第乙個真是資料的節點

struct linknode * pcurrent = pheader->next;//此處精髓 pcurrent 用於遍歷內容 pheader->next第乙個有效資料 只用於下個有效資料 自身無資料。

while (pcurrent != null) //pcurrent->num pcurrent(當前資料位址) = pcurrent->next(下個資料位址) 總結!!! }

//插入鍊錶

void insert_linklist(struct linknode* pheader, int oldval, int newval)//插入到oldval前面

//建立新節點

struct linknode * newnode = malloc(sizeof(struct linknode));

newnode->num = newval;

newnode->next = null;

//建立關係

//pprev = newnode; 上個next +new資料+下個next

pprev->next = newnode;

newnode->next = pcurrent; }

//刪除鍊錶

void delete_linklist(struct linknode * pheader, int deleteval)

pprev = pcurrent;//無此語句時 刪除的下個語句直接與頭銜接 丟失所要刪除資料其以前的資料!

pcurrent = pcurrent->next;

} //無效資料 直接return

if(pcurrent==null)

return;

//更改指標的方向

pprev->next = pcurrent->next;

//刪除節點

free(pcurrent);

pcurrent = null;

}//清除鍊錶為空鍊錶

void clear_linklist(struct linknode * pheader)

if (pcurrent == null)

}pheader->next = null;

}//登出鍊錶 即釋放pheader

void destroy_linklist(struct linknode * pheader)

登出鍊錶 即釋放pheader

//void destroy_linklist(struct linknode * pheader);

////鍊錶的反轉

void reserve_linklist(struct linknode * pheader)

if (pcurrent == null)//pprve 指向最後乙個節點 }

//鍊錶長度

void length_linklist(struct linknode * pheader)

printf("鍊錶長:%d\n", num);

}

C 鍊錶基本操作

includeusing namespace std struct node typedef node mylist void createlist mylist head,int n 1 mylist copylist mylist l 2 void insertelem mylist head,...

C 鍊錶的基本操作

鍊錶相對於陣列 插入和刪除的效率高 查詢效率低 儲存額外的節點指標,帶來空間上的消耗 include using namespace std 定義鍊錶的資料結構 struct listnode 建立單向鍊錶 listnode list create return phead next 列印單向鍊錶 ...

雙向鍊錶的基本操作 C

參考其他人的雙向鍊錶實現,搞了乙個便於自己理解的練練筆。include include using namespace std 定義乙個節點 typedef struct doublelinknode node 建立乙個鍊錶 node create list int nums,int n retur...