版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解最近在復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu),想把數(shù)據(jù)結(jié)構(gòu)里面涉及的都自己實(shí)現(xiàn)一下,完全是用C語言實(shí)現(xiàn)的。自己編寫的不是很好,大家可以參考,有錯(cuò)誤希望幫忙指正,現(xiàn)在正處于編寫階段,一共將要實(shí)現(xiàn)19個(gè)功能。到目前我只寫了一半,先傳上來,大家有興趣的可以幫忙指正,謝謝在vs2010上面編譯運(yùn)行無錯(cuò)誤。每天都會(huì)把我寫的新代碼添加到這個(gè)里面。直到此鏈表完成。#include "stdafx.h"#include "stdio.h"#include <stdlib.h>#include "string.h" typ
2、edef int elemType ; /*/* 以下是關(guān)于線性表鏈接存儲(chǔ)(單鏈表)操作的18種算法 */ /* 1.初始化線性表,即置單鏈表的表頭指針為空 */* 2.創(chuàng)建線性表,此函數(shù)輸入負(fù)數(shù)終止讀取數(shù)據(jù)*/* 3.打印鏈表,鏈表的遍歷*/* 4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結(jié)點(diǎn),使之成為一個(gè)空表 */*
3、5.返回單鏈表的長(zhǎng)度 */* 6.檢查單鏈表是否為空,若為空則返回,否則返回 */* 7.返回單鏈表中第pos個(gè)結(jié)點(diǎn)中的元素,若pos超出范圍,則停止程序運(yùn)行 */* 8.從單鏈表中查找具有給定值x的第一個(gè)元素,若查找成功則返回該結(jié)點(diǎn)data域的存儲(chǔ)地址,否則返回NULL */* 9.把單鏈表中第pos個(gè)結(jié)點(diǎn)的值修改為x的值,若修改成功返回,否則返回 */* 10.向單鏈表的表頭插入一個(gè)元素 */* 11.向單鏈表的末尾添加一個(gè)元素 */* 12.向單鏈表中第pos個(gè)結(jié)點(diǎn)位置插入元素為x的結(jié)點(diǎn),若插入成功返回,否則返回 */* 13.向有序單鏈表中插入元素x結(jié)點(diǎn),使得插入后仍然有序 */* 1
4、4.從單鏈表中刪除表頭結(jié)點(diǎn),并把該結(jié)點(diǎn)的值返回,若刪除失敗則停止程序運(yùn)行 */* 15.從單鏈表中刪除表尾結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行 */* 16.從單鏈表中刪除第pos個(gè)結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行 */* 17.從單鏈表中刪除值為x的第一個(gè)結(jié)點(diǎn),若刪除成功則返回1,否則返回0 */* 18.交換2個(gè)元素的位置 */* 19.將線性表進(jìn)行快速排序 */ /*/typedef struct Node /* 定義單鏈表結(jié)點(diǎn)類型 */ elemT
5、ype element; Node *next;Node; /* 1.初始化線性表,即置單鏈表的表頭指針為空 */void initList(Node *pNode) *pNode = NULL; printf("initList函數(shù)執(zhí)行,初始化成功n"); /* 2.創(chuàng)建線性表,此函數(shù)輸入負(fù)數(shù)終止讀取數(shù)據(jù)*/Node *creatList(Node *pHead)
6、0; Node *p1; Node *p2; p1=p2=(Node *)malloc(sizeof(Node); /申請(qǐng)新節(jié)點(diǎn) if(p1 = NULL | p2 =NULL) printf("內(nèi)存分配失敗n"); &
7、#160; exit(0); memset(p1,0,sizeof(Node); scanf("%d",&p1->element); /輸入新節(jié)點(diǎn) p1->next = NULL; /新節(jié)點(diǎn)的指針置為空
8、60; while(p1->element > 0) /輸入的值大于0則繼續(xù),直到輸入的值為負(fù) if(pHead = NULL) /空表,接入表頭 &
9、#160; pHead = p1; else
10、0; p2->next = p1; /非空表,接入表尾 p2 = p1;
11、;p1=(Node *)malloc(sizeof(Node); /再重申請(qǐng)一個(gè)節(jié)點(diǎn) if(p1 = NULL | p2 =NULL) printf("內(nèi)存分配失敗n");
12、160;exit(0); memset(p1,0,sizeof(Node); scanf("%d",&p1->element); p1->next = NULL;
13、0; printf("creatList函數(shù)執(zhí)行,鏈表創(chuàng)建成功n"); return pHead; /返回鏈表的頭指針 /* 3.打印鏈表,鏈表的遍歷*/void printList(Node *pHead) if(NULL = pHead)
14、/鏈表為空 printf("PrintList函數(shù)執(zhí)行,鏈表為空n"); else while(NULL != pHead)
15、60; printf("%d ",pHead->element); pHead = pHead->next;
16、0; printf("n"); /* 4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結(jié)點(diǎn),使之成為一個(gè)空表 */void clearList(Node *pHead) Node *pNext; /定義一個(gè)與pHead相鄰節(jié)點(diǎn) if(pHead =
17、NULL) printf("clearList函數(shù)執(zhí)行,鏈表為空n"); return; while(pHead->next != NULL)
18、60; pNext = pHead->next;/保存下一結(jié)點(diǎn)的指針 free(pHead); pHead = pNext; /表頭下移 printf("clearList函數(shù)執(zhí)行,鏈表已經(jīng)清除n"
19、); /* 5.返回單鏈表的長(zhǎng)度 */int sizeList(Node *pHead) int size = 0; while(pHead != NULL) size+; /遍歷鏈表size大小比鏈表的實(shí)際長(zhǎng)度小1
20、 pHead = pHead->next; printf("sizeList函數(shù)執(zhí)行,鏈表長(zhǎng)度 %d n",size); return size; /鏈表的實(shí)際長(zhǎng)度 /* 6.檢查單鏈表是否為空,若為空則返回,否則返回 */int isEmptyList(Node *pHead)
21、60; if(pHead = NULL) printf("isEmptyList函數(shù)執(zhí)行,鏈表為空n"); return 1; printf("isEmptyList函數(shù)執(zhí)行,鏈表非空n"
22、;); return 0; /* 7.返回單鏈表中第pos個(gè)結(jié)點(diǎn)中的元素,若pos超出范圍,則停止程序運(yùn)行 */elemType getElement(Node *pHead, int pos) int i=0; if(pos < 1) printf
23、("getElement函數(shù)執(zhí)行,pos值非法n"); return 0; if(pHead = NULL) printf("getElement函數(shù)執(zhí)行,鏈表為空n");
24、 return 0; /exit(1); while(pHead !=NULL) +i; if(i = pos)
25、0; break; pHead = pHead->next; /移到下一結(jié)點(diǎn) if(
26、i < pos) /鏈表長(zhǎng)度不足則退出 printf("getElement函數(shù)執(zhí)行,pos值超出鏈表長(zhǎng)度n"); return
27、60;0; return pHead->element; /* 8.從單鏈表中查找具有給定值x的第一個(gè)元素,若查找成功則返回該結(jié)點(diǎn)data域的存儲(chǔ)地址,否則返回NULL */elemType *getElemAddr(Node *pHead, elemType x) if(NULL = pHead) &
28、#160; printf("getElemAddr函數(shù)執(zhí)行,鏈表為空n"); return NULL; if(x < 0) printf("getElemAddr函數(shù)執(zhí)行,給定值X不合法n");
29、; return NULL; while(pHead->element != x) && (NULL != pHead->next) /判斷是否到鏈表末尾,以及是否存在所要找的元素 pHead = pHead->next;
30、160; if(pHead->element != x) && (pHead != NULL) printf("getElemAddr函數(shù)執(zhí)行,在鏈表中未找到x值n"); return NULL;
31、; if(pHead->element = x) printf("getElemAddr函數(shù)執(zhí)行,元素 %d 的地址為 0x%xn",x,&(pHead->element); return &(pHead->element);/返回元素的地址
32、 /* 9.把單鏈表中第pos個(gè)結(jié)點(diǎn)的值修改為x的值,若修改成功返回,否則返回 */int modifyElem(Node *pNode,int pos,elemType x) Node *pHead; pHead = pNode; int i = 0; if(NULL = pHead)
33、160; printf("modifyElem函數(shù)執(zhí)行,鏈表為空n"); if(pos < 1) printf("modifyElem函數(shù)執(zhí)行,pos值非法n");
34、return 0; while(pHead !=NULL) +i; if(i = pos) &
35、#160; break; pHead = pHead->next; /移到下一結(jié)點(diǎn) if(i < pos)
36、0; /鏈表長(zhǎng)度不足則退出 printf("modifyElem函數(shù)執(zhí)行,pos值超出鏈表長(zhǎng)度n"); return 0; pNode = pHead;
37、160; pNode->element = x; printf("modifyElem函數(shù)執(zhí)行n"); return 1; /* 10.向單鏈表的表頭插入一個(gè)元素 */int insertHeadList(Node *pNode,elemType insertElem) Node *pInsert;
38、 pInsert = (Node *)malloc(sizeof(Node); memset(pInsert,0,sizeof(Node); pInsert->element = insertElem; pInsert->next = *pNode; *pNode = pInsert; printf("insertHeadList函數(shù)執(zhí)
39、行,向表頭插入元素成功n"); return 1; /* 11.向單鏈表的末尾添加一個(gè)元素 */int insertLastList(Node *pNode,elemType insertElem) Node *pInsert; Node *pHead; Node *pTmp; /定義一個(gè)臨時(shí)鏈表用來存放第一個(gè)節(jié)點(diǎn)
40、 pHead = *pNode; pTmp = pHead; pInsert = (Node *)malloc(sizeof(Node); /申請(qǐng)一個(gè)新節(jié)點(diǎn) memset(pInsert,0,sizeof(Node); pInsert->element = insertElem; while(pHead->next != NULL)&
41、#160; pHead = pHead->next; pHead->next = pInsert; /將鏈表末尾節(jié)點(diǎn)的下一結(jié)點(diǎn)指向新添加的節(jié)點(diǎn) *pNode = pTmp; printf("insertLastList函數(shù)執(zhí)行,向表尾插入
42、元素成功n"); return 1; /* 12.向單鏈表中第pos個(gè)結(jié)點(diǎn)位置插入元素為x的結(jié)點(diǎn),若插入成功返回,否則返回 */ /* 13.向有序單鏈表中插入元素x結(jié)點(diǎn),使得插入后仍然有序 */* 14.從單鏈表中刪除表頭結(jié)點(diǎn),并把該結(jié)點(diǎn)的值返回,若刪除失敗則停止程序運(yùn)行 */* 15.從單鏈表中刪除表尾結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行 */* 16.從單鏈表中刪除第pos個(gè)結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行 */* 17.從單鏈表中刪除值為x的第一個(gè)結(jié)點(diǎn),若刪除成功則返回1,否則返回0 */* 18.交換2個(gè)元素的位置 */* 19.將線性表進(jìn)行快速排序 */ /*/int main() Node *pList=NULL; int length = 0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)暑假實(shí)習(xí)報(bào)告范文集合四篇
- 春季開學(xué)典禮校長(zhǎng)演講稿集合5篇
- 大學(xué)畢業(yè)生自我鑒定(8篇)
- 幼兒教師辭職申請(qǐng)書集錦9篇
- 地理教師教學(xué)工作計(jì)劃范文
- 順馳太陽城二期可行性研究報(bào)告
- 休閑食品的品牌戰(zhàn)略比較
- 七年級(jí)語文下冊(cè)教學(xué)工作總結(jié)
- 借款約束協(xié)議書(2篇)
- 2025年果蔬自動(dòng)清選、分級(jí)設(shè)備合作協(xié)議書
- 法治副校長(zhǎng)進(jìn)校園教育
- 北京市石景山區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2025版寒假特色作業(yè)
- 江西省吉安市2023-2024學(xué)年高一上學(xué)期1月期末考試政治試題(解析版)
- 國(guó)內(nèi)外航空安全形勢(shì)
- 零售業(yè)發(fā)展現(xiàn)狀與面臨的挑戰(zhàn)
- 2024年版汽車4S店商用物業(yè)租賃協(xié)議版B版
- 《微觀經(jīng)濟(jì)學(xué)》習(xí)題(含選擇題)
- 微信小程序云開發(fā)(赤峰應(yīng)用技術(shù)職業(yè)學(xué)院)知到智慧樹答案
- 2024-2025學(xué)年上學(xué)期福建高二物理期末卷2
- 2024-2025年第一學(xué)期小學(xué)德育工作總結(jié):點(diǎn)亮德育燈塔引領(lǐng)小學(xué)生全面成長(zhǎng)的逐夢(mèng)之旅
評(píng)論
0/150
提交評(píng)論