国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

數(shù)據(jù)結(jié)構(gòu)與算法:單向鏈表實(shí)現(xiàn)與封裝

2020-05-23 13:22:57
字體:
供稿:網(wǎng)友

概述

單向鏈表分為單向有頭鏈表和單線無頭鏈表,本文針對單向有頭鏈表使用C語言來實(shí)現(xiàn)并進(jìn)行封裝。

實(shí)現(xiàn)

list_head.h文件

#ifndef _LIST_H_#define _LIST_H_typedef int datatype;#define SUCC#define MALLOC_FAIL 1#define NOHEADNODE 2#define INDEXFAIL 3#define LIST_EMPTY 4#define LIST_NOEMPTY 5#define FAIL  10typedef struct List_Node { datatype data; struct List_Node* pNext;}list;list*list_create();int list_insert_at(list* pHead, int i, datatype* pData);int list_order_insert(list* pHead, datatype* pData);int list_delete_at(list* pHead, int index);int list_delete(list* pHead, datatype* pData);int list_isempty(list* pHead);void list_display(list* pHead);void list_destory(list* pHead);#endif // !_LIST_H_

list_head.c文件

/********************************************************Copyright (C), 2016-2017,FileName: listAuthor: woniu201Description:單向有頭鏈表使用********************************************************/#include <stdio.h>#include "list_head.h"/************************************@ Brief: 創(chuàng)建鏈表頭@ Author: woniu201 @ Return:   ************************************/list* list_create(){ list* pNode = (list *)malloc(sizeof(list)); memset(pNode, 0, sizeof(list)); if (pNode == NULL) { return MALLOC_FAIL; } pNode->pNext = NULL; return pNode;}/************************************@ Brief: 按位置插入節(jié)點(diǎn)@ Author: woniu201@ Return:************************************/int list_insert_at(list* pHead, int i, datatype* pData){ int j = 0; if (pHead == NULL) { return NOHEADNODE; } list* pNode = pHead; if (i<0) { return INDEXFAIL; } while (j< i && pNode !=NULL) { pNode = pNode->pNext; j++; } if (pNode == NULL) { return INDEXFAIL; } else { list* newNode = (list*)malloc(sizeof(list)); if (newNode ==NULL) {  return MALLOC_FAIL; } memset(newNode, 0, sizeof(list)); newNode->data = *pData; pNode->pNext = newNode; } return SUCC;}/************************************@ Brief: 按順序插入節(jié)點(diǎn)@ Author: woniu201@ Return:************************************/int list_order_insert(list* pHead, datatype* pData){ if (pHead == NULL) { return NOHEADNODE; } list* pNewNode = (list*)malloc(sizeof(list)); if (pNewNode == NULL) { return MALLOC_FAIL; } memset(pNewNode, 0, sizeof(list)); pNewNode->data = *pData; list* pNode = pHead; if (pNode->pNext == NULL) { pNode->pNext = pNewNode; return SUCC; } while (pNode->pNext != NULL && pNode->pNext->data < *pData) { pNode = pNode->pNext; }  if (pNode->pNext)  { pNewNode->pNext = pNode->pNext; pNode->pNext = pNewNode;  } else { pNode->pNext = pNewNode; } return SUCC;}/************************************@ Brief: 按位置刪除節(jié)點(diǎn)@ Author: woniu201@ Return:************************************/int list_delete_at(list* pHead, int index){ int j = 0; if (pHead == NULL) { return NOHEADNODE; } if (index < 0) { return INDEXFAIL; } list* pCur = pHead; list* pNode = pHead; while (pCur->pNext) { pNode = pCur; pCur = pCur->pNext; if (index == j) {  break; } j++; } if (j< index) { printf("不存在該節(jié)點(diǎn)/n"); return INDEXFAIL; } else { if (pCur->pNext == NULL) {  pNode->pNext = NULL; } else {  pNode->pNext = pCur->pNext; } free(pCur); pCur = NULL; } return SUCC;}/************************************@ Brief: 按值刪除節(jié)點(diǎn)@ Author: woniu201@ Return:************************************/int list_delete(list* pHead, datatype* pData){ if (pHead == NULL) { return NOHEADNODE; } list* pCur = pHead; list* pNode = pHead; int bFind = 0; while (pCur->pNext) { pNode = pCur; pCur = pCur->pNext; if (pCur->data == *pData) {  bFind = 1;  break; } } if (!bFind) { printf("不存在該節(jié)點(diǎn)/n"); return INDEXFAIL; } else { if (pCur->pNext == NULL) {  pNode->pNext = NULL; } else {  pNode->pNext = pCur->pNext; } free(pCur); pCur = NULL; } return SUCC;}/************************************@ Brief: 判斷鏈表是否為空@ Author: woniu201@ Return:************************************/int list_isempty(list* pHead){ if (pHead->pNext == NULL) { return LIST_EMPTY; } else { return LIST_NOEMPTY; }}/************************************@ Brief: 遍歷打印鏈表@ Author: woniu201@ Return:************************************/void list_display(list* pHead){ if (list_isempty(pHead) == LIST_EMPTY) { printf("鏈表為空/n"); return FAIL; } list* pNode = pHead->pNext; while (pNode) { printf("%d/n", pNode->data); pNode = pNode->pNext; }}/************************************@ Brief: 釋放鏈表內(nèi)存@ Author: woniu201@ Return:************************************/void  list_destory(list* pHead){ list* pCur = pHead; list* pNext = pHead->pNext; while (pNext) { pNext = pNext->pNext; free(pCur); pCur = NULL; pCur = pNext; }}

main.c 測試

#include <stdio.h>#include "list_head.h"int main(){ list* pHead = list_create(); int data1 = 1; int data2 = 3; int data3 = 2;// int ret = list_insert_at(pHead,0, &data1);// ret = list_insert_at(pHead, 1, &data2);// if (ret == INDEXFAIL)// {//  printf("添加索引位置錯(cuò)誤/n");// } list_order_insert(pHead, &data2); list_order_insert(pHead, &data1); list_order_insert(pHead, &data3); list_delete_at(pHead, 3); int deleteData = 1; list_delete(pHead, &deleteData); list_display(pHead); list_destory(pHead); return 1;}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對VEVB武林網(wǎng)的支持。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 腾冲县| 五指山市| 桐梓县| 台山市| 文登市| 赞皇县| 山西省| 邮箱| 纳雍县| 屏边| 孟州市| 阜新市| 长丰县| 苗栗市| 临沭县| 芜湖市| 桓台县| 邵阳县| 招远市| 厦门市| 利川市| 天门市| 土默特左旗| 定襄县| 乌鲁木齐市| 江油市| 丹江口市| 原平市| 中江县| 阿尔山市| 体育| 五莲县| 西畴县| 高阳县| 南乐县| 平邑县| 南宫市| 三江| 德格县| 冷水江市| 萍乡市|