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

首頁 > 編程 > C > 正文

數據結構與算法:單向鏈表實現與封裝

2020-01-26 13:35:50
字體:
來源:轉載
供稿:網友

概述

單向鏈表分為單向有頭鏈表和單線無頭鏈表,本文針對單向有頭鏈表使用C語言來實現并進行封裝。

實現

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: 創建鏈表頭@ 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: 按位置插入節點@ 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: 按順序插入節點@ 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: 按位置刪除節點@ 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("不存在該節點/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_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("不存在該節點/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: 釋放鏈表內存@ 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("添加索引位置錯誤/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;}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 广丰县| 永州市| 黄骅市| 博客| 城市| 石林| 汝州市| 抚顺县| 日照市| 深州市| 象山县| 永城市| 宽城| 太康县| 绥化市| 溧水县| 章丘市| 南阳市| 曲沃县| 榕江县| 东乡| 云阳县| 五寨县| 资阳市| 民和| 内丘县| 苏尼特左旗| 乌兰县| 托克托县| 迁安市| 滦平县| 定结县| 漾濞| 开阳县| 西林县| 江永县| 河池市| 寿阳县| 中牟县| 民勤县| 新营市|