鏈表-線性表的鏈式表示

鏈表-線性表的鏈式表示

L
xxx / 0x9d15e0
data1 / 0x9d17a0
data2 / 0x9d1660
data3 / NULL

頭插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;
typedef struct LNode {// 存儲數據ElemType data;// 后繼節點地址LNode *next;
} LNode, *LinkList;/** 頭插法創建鏈表*/
void list_head_insert(LinkList &L) {// 創建頭節點// L指向頭節點L = (LinkList) malloc(sizeof(LNode));L->next = NULL;// 創建新節點指針LinkList new_node;ElemType data;// 讀取數據scanf("%d", &data);while (999 != data) {// 創建新節點// 指針指向新節點new_node = (LinkList) malloc(sizeof(LNode));// 存入數據值new_node->data = data;// 新節點的next指向鏈表的第一個元素(不包含頭節點)new_node->next = L->next;// 新節點作為第一個節點L->next = new_node;// 再次讀取數據scanf("%d", &data);}
}/** 打印鏈表*/
void print_list(LinkList L) {// L指向第一個節點L = L->next;while (NULL != L) {printf("%3d", L->data);// 指向下一個節點L = L->next;}
}int main() {// 一、創建鏈表頭指針LinkList L;// 二、頭插法創建鏈表list_head_insert(L);// 三、打印鏈表print_list(L);return 0;
}

尾插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;typedef struct LNode {// 存儲數據ElemType data;// 后繼節點地址LNode *next;
} LNode, *LinkList;/** 尾插法創建鏈表*/
void list_tail_insert(LinkList &L) {// 創建頭節點// L指向頭節點L = (LinkList) malloc(sizeof(LNode));L->next = NULL;// 創建新節點指針變量s 尾節點指針變量rLinkList new_node, r;r = L;ElemType data;scanf("%d", &data);while (999 != data) {// 創建新節點new_node = (LinkList) malloc(sizeof(LNode));// 存入數據值new_node->data = data;// 尾節點的next指向新節點r->next = new_node;// 新節點變成尾節點r = new_node;// 輸入數據scanf("%d", &data);}// 尾節點的next指向NULLr->next = NULL;
}/** 打印鏈表*/
void print_list(LinkList L) {// L指向第一個節點L = L->next;while (NULL != L) {printf("%3d", L->data);// 指向下一個節點L = L->next;}printf("\n");
}/** 通過位置查找元素*/
LinkList search_elem_by_location(LinkList L, int pos) {// 判斷位置是否合法if (0 > pos) {return NULL;}int i = 0;while (L && i < pos) {L = L->next;i++;}return L;
}/** 通過值查找元素*/
LinkList search_elem_by_value(LinkList L, ElemType data) {while (L) {if (data == L->data) {return L;}// 未匹配時 L指向下一個節點L = L->next;}return L;
}/** 鏈表插入元素* 此處不改變頭指針L因此不需要寫引用* @param*/
bool list_insert_elememt(LinkList L, int pos, ElemType data) {// 獲取第pos-1個元素LinkList p = search_elem_by_location(L, pos - 1);// 判斷位置是否合法if (NULL == p) {return false;}// 創建新節點LinkList q = (LinkList) malloc(sizeof(LNode));q->data = data;q->next = p->next;p->next = q;return true;
}/** 按位置刪除元素* 此處不改變頭指針L因此不需要寫引用*/
bool list_delete(LinkList L, int pos) {// 查詢第pos-1個位置LinkList p = search_elem_by_location(L, pos - 1);if (NULL == p) {return false;}// 被刪除的元素LinkList q;q = p->next;// 如果要刪除的位置 超過了鏈表長度if (NULL == q) {return false;}// 斷鏈p->next = q ->next;// 釋放節點空間free(q);return true;
}int main() {// 一、創建鏈表頭指針LinkList L;// 二、尾插法創建鏈表list_tail_insert(L);// 三、打印鏈表print_list(L);// 四、查詢操作LinkList search_elem = search_elem_by_location(L, 2);// 按位置查找元素if (search_elem) {printf("search elem by location success\n");printf("element data = %d\n", search_elem->data);} else {printf("search elem by location faild\n");}// 按值查詢元素search_elem = search_elem_by_value(L, 99);if (search_elem) {printf("search elem by value success\n");printf("element data = %d\n", search_elem->data);} else {printf("search elem by value faild\n");}// 五、插入操作// 新節點插入在第i個位置bool ret = list_insert_elememt(L, 2, 19);if (ret) {printf("insert success\n");} else {printf("insert fail\n");}print_list(L);// 六、刪除操作ret = list_delete(L, 9);if (ret) {printf("delete success\n");} else {printf("delete failed\n");}print_list(L);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16230.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

express 設定路徑別名

在使用ts情況下 pnpm i -D tsconfig-paths配置tsconfig.json {// 引入 tsconfig-paths/register// 注意 ts-node 的層級與 compilerOptions 相同"ts-node": {"require": ["tsconfig-paths/register"]},"compilerOptions": {// ...//…

width: auto 和 width: 100% 的區別

width: auto Vs. width: 100% 關于 width 屬性 CSS 中的 width 屬性用于設置元素的寬度。默認情況下&#xff0c;width 設置的是內容區&#xff08;content area&#xff09;的寬度。如果元素有樣式 box-sizing: border-box&#xff0c;則 width 設置的是邊框區&#xff08;bo…

正運動控制器:視覺糾偏和找孔

一、用戶主界面CCD參數設置 通過主界面CCD參數設置&#xff0c;學習如何操作計算相機中心與電批中心的偏移量&#xff0c;以及相機標定的功能。 1、相機中心與電批中心的偏移量計算 1.1、在用戶主界面點擊CCD參數按鈕&#xff0c;進入CCD設置界面。 主界面 CCD參數設置界面 1…

制作電子畫冊速成攻略,快來試試

?當今社會&#xff0c;數字媒體日益普及&#xff0c;電子畫冊作為一種嶄新的展示方式&#xff0c;受到了越來越多人的青睞。它不僅形式新穎&#xff0c;互動性強&#xff0c;而且制作起來也并不復雜。想知道如何快速掌握制作電子畫冊的技巧嗎&#xff1f;我來教你吧。 接下來&…

二叉樹的廣義表反序列化

前言 個人小記 一、代碼 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_NODE 10 #define MAX_LEN 100 #define key(n)(n)?(n->key):(-1) typedef struct Node {int key;struct Node* lchild,*rchil…

Leetcode 3159. Find Occurrences of an Element in an Array

Leetcode 3159. Find Occurrences of an Element in an Array 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3159. Find Occurrences of an Element in an Array 1. 解題思路 這一題的話我們只需要首先統計一下array當中目標元素x出現在第幾次的位置&#xff0c;構造一個has…

推薦13款常用的Vscode插件,提高前端日常開發效率

1. Live Server Live Server 插件是一個用于前端開發的擴展&#xff0c;它的主要作用是提供一個本地開發服務器&#xff0c;以便實時預覽和調試網頁應用程序。其最大特點在于熱重載&#xff0c;即開發者可實時預覽代碼效果。 因為Live Server 允許開發者在瀏覽器中實時預覽您正…

軟件測試面試題(五)

一&#xff1a;如何選擇用戶測試的工作產品&#xff1f;、 答&#xff1a;在用戶有需求得到簽字確認以后&#xff0c;我們選擇用戶測試的工作產品。我們幾乎所有的項目都進行了測試&#xff0c;我們是在項目立項公告中得知需要對工作產品進行測試。 二&#xff1a;測試環境描述…

C++中集合的使用

在 C 中&#xff0c;集合通常指的是標準模板庫&#xff08;STL&#xff09;中的 std::set 或 std::unordered_set。這兩個都是用來存儲不重復元素的容器&#xff0c;但在實現和使用方式上有一些區別。 1. std::set&#xff1a; 基于紅黑樹實現&#xff0c;元素按照嚴格的順序…

Llama 3沒能逼出GPT-5!OpenAI怒“卷”To B戰場,新企業級 AI 功能重磅推出!

Meta 是本周當之無愧的AI巨星&#xff01;剛剛推出的 Llama 3 憑借著強大的性能和開源生態的優勢在 LLM 排行榜上迅速躍升。 按理說&#xff0c;Llama 3在開源的狀態下做到了 GPT-3.7 的水平&#xff0c;必然會顯得用戶&#xff08;尤其是企業用戶&#xff0c;他們更具備獨立部…

指令中常用的7種尋址方式z

指令中的尋址方式就是對指令中的地址字段進行解釋&#xff0c;以獲得操作數的方法或獲得程序轉移地址的方法。常用的尋址方式有&#xff1a; 立即尋址&#xff1a;操作數就包含在指令中。直接尋址&#xff1a;操作數存放在內存單元中&#xff0c;指令中直接給出操作數所在存儲…

C#調用HttpClient.SendAsync報錯:System.Net.Http.HttpRequestException: 發送請求時出錯。

C#調用HttpClient.SendAsync報錯&#xff1a;System.Net.Http.HttpRequestException: 發送請求時出錯。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);問題出在SSL/TLS&#xff0c;Windows Server 2012不支持…

先進制造aps專題八 基于ai大模型的ai超級應用,ai生管

目前正在研發的面向消費者的ai超級應用有ai文員&#xff0c;ai教師&#xff0c;ai家教&#xff0c;ai護士&#xff0c;ai翻譯 而ai生管無疑是面向制造業的ai超級應用 從商業角度來說&#xff0c;ai生管&#xff0c;必然是aps公司必然要研發的ai超級應用

Grafana 路徑遍歷所有路徑 CVE-2021-43798漏洞預警

簡介? ?Grafana是一個跨平臺、開源的數據可視化網絡應用程序平臺。用戶配置連接的數據源之后&#xff0c;Grafana可以在網絡瀏覽器里顯示數據圖表和警告。 漏洞危害等級 高危 CVE 編號? CVE-2021-43798 FOFA查詢 ?app"Grafana" ?zoomeyes查詢 ?app:"gr…

Vue3解決“找不到模塊“@/components/xxx.vue”或其相應的類型聲明”

文章目錄 前言背景問題描述解決方案總結 前言 在使用 Vue 3 開發項目時&#xff0c;遇到“找不到模塊 ‘/components/xxx.vue’ 或其相應的類型聲明”的錯誤是一個常見問題。這通常與 TypeScript 和模塊解析相關的配置不當有關。本文將詳細介紹如何解決此問題&#xff0c;確保…

2024-6-遙遠的救世主

2024-6-遙遠的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完電視劇《天道》之后購買本書&#xff0c;斷斷續續一直沒有讀完。 非常好奇&#xff0c;一個什么樣的作者能寫出如此奇書。老丁&#xff0c;一個智者&#xff0c;智者是多么孤獨&#xff0c;因為找不到同…

信息安全等級保護測評: 登陸日志

文章目錄 引言I 登錄日志表結構設計II 日志處理2.1 封裝日志入庫2.2 收集登陸信息2.3 查詢接口引言 等保測評是信息安全等級保護測評的簡稱,是對信息和信息載體按照重要性等級分級別進行檢測、評估的過程。 背景:近期AIS監控平臺(網頁版)等保測評,發現沒有登陸日志,現要…

從用法到源碼再到應用場景:全方位了解CompletableFuture及其線程池

文章目錄 文章導圖什么是CompletableFutureCompletableFuture用法總結API總結 為什么使用CompletableFuture場景總結 CompletableFuture默認線程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 線程池ThreadPerTaskExecutor線程池Completab…

Qt 界面上字體自適應控件大小 - 隨控件縮放

Qt 界面上字體自適應控件大小 - 隨控件縮放 引言一、設計思路二、進階版大致思路三、參考鏈接 引言 Qt控件自適應字體大小可以用adjustSize()函數&#xff0c;但字體自適應控件大小并沒有現成的函數可調. - 本文實現了按鈕上的字體隨按鈕大小變化而變化 (如上圖所示) - 其他控件…