欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年12月22日 10:04:58   作者:蝸牛201  
今天小編就為大家分享一篇關于數(shù)據(jù)結構與算法:單向鏈表實現(xiàn)與封裝,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

概述

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

實現(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  10
typedef 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: list
Author: woniu201
Description:單向有頭鏈表使用
********************************************************/
#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é)點
@ 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é)點
@ 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é)點
@ 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é)點\n");
 return INDEXFAIL;
 }
 else
 {
 if (pCur->pNext == NULL)
 {
  pNode->pNext = NULL;
 }
 else
 {
  pNode->pNext = pCur->pNext;
 }
 free(pCur);
 pCur = NULL;
 }
 return SUCC;
}
/************************************
@ Brief: 按值刪除節(jié)點
@ 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é)點\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;
}

總結

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

相關文章

  • Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn)

    Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn)

    本文主要介紹了Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 哈夫曼算法構造代碼

    哈夫曼算法構造代碼

    這篇文章主要介紹了哈夫曼算法構造代碼,有需要的朋友可以參考一下
    2013-12-12
  • C語言深入分析浮點型數(shù)據(jù)存儲

    C語言深入分析浮點型數(shù)據(jù)存儲

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內存位置。這意味著,當您創(chuàng)建一個變量時,就會在內存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內存和決定在保留內存中存儲什么
    2022-08-08
  • C/C++實現(xiàn)三路快速排序算法原理

    C/C++實現(xiàn)三路快速排序算法原理

    這篇文章主要為大家詳細介紹了C/C++實現(xiàn)三路快速排序算法原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 淺談C語言之字符串處理函數(shù)

    淺談C語言之字符串處理函數(shù)

    下面小編就為大家?guī)硪黄獪\談C語言之字符串處理函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • OpenCV實現(xiàn)相機標定板

    OpenCV實現(xiàn)相機標定板

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)相機標定板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C語言實現(xiàn)通訊錄管理系統(tǒng)

    C語言實現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 神奇的c/c++小游戲((提高你的編程興趣)

    神奇的c/c++小游戲((提高你的編程興趣)

    本文通過c/c++編寫小游戲,可以提高新手們的編程興趣,接下來我們一起來看看吧
    2021-08-08
  • Qt(C++)調用工業(yè)相機Basler的SDK使用示例

    Qt(C++)調用工業(yè)相機Basler的SDK使用示例

    這篇文章主要介紹了Qt(C++)調用工業(yè)相機Basler的SDK使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C++類中的static和const用法實例教程

    C++類中的static和const用法實例教程

    這篇文章主要介紹了C++類中的static和const用法,是C++面向對象程序設計中非常重要的概念,需要的朋友可以參考下
    2014-08-08

最新評論