C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解_第1頁(yè)
C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解_第2頁(yè)
C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解_第3頁(yè)
C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解_第4頁(yè)
C語言單鏈表實(shí)現(xiàn)19個(gè)功能完全詳解_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論