日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表 操作的18种算法

發布時間:2025/5/22 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表 操作的18种算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include "stdafx.h" #include "stdio.h" #include <stdlib.h> #include "string.h" typedef int elemType ; /************************************************************************/ /*???????????? 以下是關于線性表鏈接存儲(單鏈表)操作的18種算法??????? */ /* 1.初始化線性表,即置單鏈表的表頭指針為空 */ /* 2.創建線性表,此函數輸入負數終止讀取數據*/ /* 3.打印鏈表,鏈表的遍歷*/ /* 4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結點,使之成為一個空表 */ /* 5.返回單鏈表的長度 */ /* 6.檢查單鏈表是否為空,若為空則返回1,否則返回0 */ /* 7.返回單鏈表中第pos個結點中的元素,若pos超出范圍,則停止程序運行 */ /* 8.從單鏈表中查找具有給定值x的第一個元素,若查找成功則返回該結點data域的存儲地址,否則返回NULL */ /* 9.把單鏈表中第pos個結點的值修改為x的值,若修改成功返回1,否則返回0 */ /* 10.向單鏈表的表頭插入一個元素 */ /* 11.向單鏈表的末尾添加一個元素 */ /* 12.向單鏈表中第pos個結點位置插入元素為x的結點,若插入成功返回1,否則返回0 */ /* 13.向有序單鏈表中插入元素x結點,使得插入后仍然有序 */ /* 14.從單鏈表中刪除表頭結點,并把該結點的值返回,若刪除失敗則停止程序運行 */ /* 15.從單鏈表中刪除表尾結點并返回它的值,若刪除失敗則停止程序運行 */ /* 16.從單鏈表中刪除第pos個結點并返回它的值,若刪除失敗則停止程序運行 */ /* 17.從單鏈表中刪除值為x的第一個結點,若刪除成功則返回1,否則返回0 */ /* 18.交換2個元素的位置 */ /* 19.將線性表進行快速排序 */ /************************************************************************/ typedef struct Node{??? /* 定義單鏈表結點類型 */ ??? elemType element; ??? Node *next; }Node; /* 1.初始化線性表,即置單鏈表的表頭指針為空 */ void initList(Node **pNode) { ??? *pNode = NULL; ??? printf("initList函數執行,初始化成功\n"); } /* 2.創建線性表,此函數輸入負數終止讀取數據*/ Node *creatList(Node *pHead) { ??? Node *p1; ??? Node *p2; ??? p1=p2=(Node *)malloc(sizeof(Node)); //申請新節點 ??? if(p1 == NULL || p2 ==NULL) ??? { ??????? printf("內存分配失敗\n"); ??????? exit(0); ??? } ??? memset(p1,0,sizeof(Node)); ??? scanf("%d",&p1->element);??? //輸入新節點 ??? p1->next = NULL;???????? //新節點的指針置為空 ??? while(p1->element > 0)??????? //輸入的值大于0則繼續,直到輸入的值為負 ??? { ??????? if(pHead == NULL)?????? //空表,接入表頭 ??????? { ??????????? pHead = p1; ??????? } ??????? else?????????????? ??????? { ??????????? p2->next = p1;?????? //非空表,接入表尾 ??????? } ??????? p2 = p1; ??????? p1=(Node *)malloc(sizeof(Node));??? //再重申請一個節點 ??????? if(p1 == NULL || p2 ==NULL) ??????? { ??????? printf("內存分配失敗\n"); ??????? exit(0); ??????? } ??????? memset(p1,0,sizeof(Node)); ??????? scanf("%d",&p1->element); ??????? p1->next = NULL; ??? } ??? printf("creatList函數執行,鏈表創建成功\n"); ??? return pHead;?????????? //返回鏈表的頭指針 } /* 3.打印鏈表,鏈表的遍歷*/ void printList(Node *pHead) { ??? if(NULL == pHead)?? //鏈表為空 ??? { ??????? printf("PrintList函數執行,鏈表為空\n"); ??? } ??? else ??? { ??????? while(NULL != pHead) ??????? { ??????????? printf("%d ",pHead->element); ??????????? pHead = pHead->next; ??????? } ??????? printf("\n"); ??? } } /* 4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結點,使之成為一個空表 */ void clearList(Node *pHead) { ??? Node *pNext;??????????? //定義一個與pHead相鄰節點 ??? if(pHead == NULL) ??? { ??????? printf("clearList函數執行,鏈表為空\n"); ??????? return; ??? } ??? while(pHead->next != NULL) ??? { ??????? pNext = pHead->next;//保存下一結點的指針 ??????? free(pHead); ??????? pHead = pNext;????? //表頭下移 ??? } ??? printf("clearList函數執行,鏈表已經清除\n"); } /* 5.返回單鏈表的長度 */ int sizeList(Node *pHead) { ??? int size = 0; ??? while(pHead != NULL) ??? { ??????? size++;???????? //遍歷鏈表size大小比鏈表的實際長度小1 ??????? pHead = pHead->next; ??? } ??? printf("sizeList函數執行,鏈表長度 %d \n",size); ??? return size;??? //鏈表的實際長度 } /* 6.檢查單鏈表是否為空,若為空則返回1,否則返回0 */ int isEmptyList(Node *pHead) { ??? if(pHead == NULL) ??? { ??????? printf("isEmptyList函數執行,鏈表為空\n"); ??????? return 1; ??? } ??? printf("isEmptyList函數執行,鏈表非空\n"); ??? return 0; } /* 7.返回單鏈表中第pos個結點中的元素,若pos超出范圍,則停止程序運行 */ elemType getElement(Node *pHead, int pos) { ??? int i=0; ??? if(pos < 1) ??? { ??????? printf("getElement函數執行,pos值非法\n"); ??????? return 0; ??? } ??? if(pHead == NULL) ??? { ??????? printf("getElement函數執行,鏈表為空\n"); ??????? return 0; ??????? //exit(1); ??? } ??? while(pHead !=NULL) ??? { ??????? ++i; ??????? if(i == pos) ??????? { ??????????? break; ??????? } ??????? pHead = pHead->next; //移到下一結點 ??? } ??? if(i < pos)????????????????? //鏈表長度不足則退出 ??? { ??????? printf("getElement函數執行,pos值超出鏈表長度\n"); ??????? return 0; ??? } ??? return pHead->element; } /* 8.從單鏈表中查找具有給定值x的第一個元素,若查找成功則返回該結點data域的存儲地址,否則返回NULL */ elemType *getElemAddr(Node *pHead, elemType x) { ??? if(NULL == pHead) ??? { ??????? printf("getElemAddr函數執行,鏈表為空\n"); ??????? return NULL; ??? } ??? if(x < 0) ??? { ??????? printf("getElemAddr函數執行,給定值X不合法\n"); ??????? return NULL; ??? } ??? while((pHead->element != x) && (NULL != pHead->next)) //判斷是否到鏈表末尾,以及是否存在所要找的元素 ??? { ??????? pHead = pHead->next; ??? } ??? if((pHead->element != x) && (pHead != NULL)) ??? { ??????? printf("getElemAddr函數執行,在鏈表中未找到x值\n"); ??????? return NULL; ??? } ??? if(pHead->element == x) ??? { ??????? printf("getElemAddr函數執行,元素 %d 的地址為 0x%x\n",x,&(pHead->element)); ??? } ??? return &(pHead->element);//返回元素的地址 } /* 9.把單鏈表中第pos個結點的值修改為x的值,若修改成功返回1,否則返回0 */ int modifyElem(Node *pNode,int pos,elemType x) { ??? Node *pHead; ??? pHead = pNode; ??? int i = 0; ??? if(NULL == pHead) ??? { ??????? printf("modifyElem函數執行,鏈表為空\n"); ??? } ??? if(pos < 1) ??? { ??????? printf("modifyElem函數執行,pos值非法\n"); ??????? return 0; ??? } ??? while(pHead !=NULL) ??? { ??????? ++i; ??????? if(i == pos) ??????? { ??????????? break; ??????? } ??????? pHead = pHead->next; //移到下一結點 ??? } ??? if(i < pos)????????????????? //鏈表長度不足則退出 ??? { ??????? printf("modifyElem函數執行,pos值超出鏈表長度\n"); ??????? return 0; ??? } ??? pNode = pHead; ??? pNode->element = x; ??? printf("modifyElem函數執行\n"); ??? ??? return 1; } /* 10.向單鏈表的表頭插入一個元素 */ int insertHeadList(Node **pNode,elemType insertElem) { ??? Node *pInsert; ??? pInsert = (Node *)malloc(sizeof(Node)); ??? memset(pInsert,0,sizeof(Node)); ??? pInsert->element = insertElem; ??? pInsert->next = *pNode; ??? *pNode = pInsert; ??? printf("insertHeadList函數執行,向表頭插入元素成功\n"); ??? return 1; } /* 11.向單鏈表的末尾添加一個元素 */ int insertLastList(Node **pNode,elemType insertElem) { ??? Node *pInsert; ??? Node *pHead; ??? Node *pTmp; //定義一個臨時鏈表用來存放第一個節點 ??? pHead = *pNode; ??? pTmp = pHead; ??? pInsert = (Node *)malloc(sizeof(Node)); //申請一個新節點 ??? memset(pInsert,0,sizeof(Node)); ??? pInsert->element = insertElem; ??? while(pHead->next != NULL) ??? { ??????? pHead = pHead->next; ??? } ??? pHead->next = pInsert;?? //將鏈表末尾節點的下一結點指向新添加的節點 ??? *pNode = pTmp; ??? printf("insertLastList函數執行,向表尾插入元素成功\n"); ??? return 1; } /* 12.向單鏈表中第pos個結點位置插入元素為x的結點,若插入成功返回1,否則返回0 */ /* 13.向有序單鏈表中插入元素x結點,使得插入后仍然有序 */ /* 14.從單鏈表中刪除表頭結點,并把該結點的值返回,若刪除失敗則停止程序運行 */ /* 15.從單鏈表中刪除表尾結點并返回它的值,若刪除失敗則停止程序運行 */ /* 16.從單鏈表中刪除第pos個結點并返回它的值,若刪除失敗則停止程序運行 */ /* 17.從單鏈表中刪除值為x的第一個結點,若刪除成功則返回1,否則返回0 */ /* 18.交換2個元素的位置 */ /* 19.將線性表進行快速排序 */ /******************************************************************/ int main() { ??? Node *pList=NULL; ??? int length = 0; ??? elemType posElem; ??? initList(&pList);?????? //鏈表初始化 ??? printList(pList);?????? //遍歷鏈表,打印鏈表 ??? pList=creatList(pList); //創建鏈表 ??? printList(pList); ??? ??? sizeList(pList);??????? //鏈表的長度 ??? printList(pList); ??? isEmptyList(pList);???? //判斷鏈表是否為空鏈表 ??? ??? posElem = getElement(pList,3);? //獲取第三個元素,如果元素不足3個,則返回0 ??? printf("getElement函數執行,位置 3 中的元素為 %d\n",posElem);?? ??? printList(pList); ??? getElemAddr(pList,5);?? //獲得元素5的地址 ??? modifyElem(pList,4,1);? //將鏈表中位置4上的元素修改為1 ??? printList(pList); ??? insertHeadList(&pList,5);?? //表頭插入元素12 ??? printList(pList); ??? insertLastList(&pList,10);? //表尾插入元素10 ??? printList(pList); ??? clearList(pList);?????? //清空鏈表 ??? system("pause"); ??? }

轉載于:https://www.cnblogs.com/hainanlinyu/p/3215792.html

總結

以上是生活随笔為你收集整理的单链表 操作的18种算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久av | 一卡二卡三卡在线观看 | 免费在线观看成人 | jizz日本免费| 波多野结衣一区在线 | 91热热 | 国产无遮挡一区二区三区毛片日本 | 国产精品一区二区三区高潮 | 日本视频免费在线播放 | 91久久精品一区二区三 | 日韩中文字幕在线播放 | 99在线免费观看视频 | 亚洲精品自拍视频 | 亚洲专区欧美 | 色人阁视频 | 中国精品一区二区 | 国产xxx在线 | 91在线观看成人 | 久久精品久久久精品美女 | 中国特级黄色片 | 好吊妞精品视频 | 国产专区第一页 | 91色网站 | 欧美少妇喷水 | 澳门色网| 制服丝袜先锋 | 欧美性生交大片免费看 | 男人和女人在床的app | 五月天婷婷激情视频 | 欧美精品v国产精品v日韩精品 | 精品孕妇一区二区三区 | 日日撸夜夜撸 | 国产九九久久 | 乳孔很大能进去的av番号 | 天天综合国产 | 极品少妇在线 | 1769国产精品 | 国产一级α片 | 操极品 | 风间ゆみ大战黑人 | 亚洲男女在线观看 | 久久成人人人人精品欧 | 2024av| 久久久久成人精品免费播放动漫 | 五月天激情社区 | 先锋影视av| 蜜桃传媒一区二区亚洲av | 好吊操这里只有精品 | 成人网站免费观看入口 | 在线观看羞羞漫画 | 日韩天堂一区 | 国产3级在线 | 妻子的性幻想 | 国产主播一区二区三区 | 91狠狠| gogo亚洲国模私拍人体 | 人妻一区二区三区四区五区 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 2022精品国偷自产免费观看 | 国产成人久久精品麻豆二区 | 亚洲天堂欧美 | av的天堂| 在线午夜av | 波多野结衣一区二区三区在线观看 | 日美韩av| 黄色大片免费在线观看 | 国产免费一区二区三区四区五区 | 精品久久久久久久久久久 | 欧美a一级| 国产视频一区二区在线播放 | 黄网站在线观看 | 欧美精品综合 | 欧美第一页| 亚洲天堂视频在线播放 | 女优中文字幕 | 国产精品二三区 | 91成人久久| 99久久久久成人国产免费 | 大奶子av| 亚洲国产日本 | 人成在线视频 | 日韩经典午夜福利发布 | 成人做爰视频www网站小优视频 | 污视频导航 | 777亚洲 | 91av视频在线观看 | 手机在线精品视频 | 超碰人人干人人 | 成年人免费看视频 | 国产jizz18女人高潮 | 九九九九精品 | 亚洲麻豆一区 | 中文字幕免费av | 九色婷婷 | 最新黄网| 插吧插吧网 | 欧美日韩一区二区区别是什么 | 成都免费高清电影 | 国产chinasex麻豆videos |