亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-18 07:08:07 來源:腳本之家 閱讀:179 作者:蝸牛201 欄目:編程語言

概述

單向鏈表分為單向有頭鏈表和單線無頭鏈表,本文針對單向有頭鏈表使用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  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: 創建鏈表頭
@ 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;
}

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永顺县| 禹城市| 临沭县| 梅河口市| 封开县| 万宁市| 印江| 宜良县| 久治县| 峨边| 建水县| 吉安市| 当涂县| 康乐县| 休宁县| 广安市| 南投市| 莱芜市| 蓝山县| 神农架林区| 襄城县| 乐陵市| 雷州市| 正宁县| 临漳县| 顺义区| 福海县| 邻水| 马山县| 长丰县| 杭锦旗| 锦屏县| 当涂县| 称多县| 清流县| 华安县| 西林县| 沁源县| 凤凰县| 九龙城区| 电白县|