C语言单链表及其增删改查

主要利用结构体、一级指针、二级指针等C语言知识。

数据结构如下:

struct tagListNode
{int v;//存储数据struct tagListNode *next;//指向下一节点
};typedef struct tagList
{struct tagListNode *nStart;//指向头节点struct tagListNode *nEnd;//指向尾节点int Size;//记录数据大小
}TList, *PTList;

示例如下:

待优化,可供借鉴。

#include<stdio.h>struct tagListNode
{int v;struct tagListNode *next;
};typedef struct tagList
{struct tagListNode *nStart;struct tagListNode *nEnd;int Size;
}TList, *PTList;//初始化链表
static int ListInit(PTList *ppv)
{PTList pv = malloc(sizeof(TList));pv->nEnd = malloc(sizeof(struct tagListNode));pv->nEnd->next = NULL;pv->nEnd->v = 0;pv->nStart = pv->nEnd;pv->Size = 1;*ppv = pv;pv = NULL;return 1;
}//尾部增加数据
static int ListAdd(PTList pv, int v)
{if (pv == NULL)return 0;pv->nEnd->v = v;struct tagListNode *pvNode = malloc(sizeof(struct tagListNode));pvNode->v = 0;pvNode->next = NULL;pv->Size++;pv->nEnd->next = pvNode;pv->nEnd = pvNode;return 1;
}//头部增加数据
static int ListHeadAdd(PTList pv, int v)
{if (pv == NULL)return 0;struct tagListNode *pvNode = malloc(sizeof(struct tagListNode));pvNode->v = v;pvNode->next = pv->nStart;pv->Size++;pv->nStart = pvNode;return 1;
}//指定位置删除节点
static int ListDelete(PTList pv, int index)
{if (pv == NULL || pv->Size == 0)return 0;int count = -1;struct tagListNode* headNode = pv->nStart;while (headNode != NULL && (++count) != index - 1 && index != 0)headNode = headNode->next;if (index == 0){pv->nStart = pv->nStart->next;free(headNode);}else{struct tagListNode* temp = headNode->next;headNode->next = headNode->next->next;free(temp);temp = NULL;}headNode = NULL;pv->Size--;//printf("%d\n", headNode->v);return 1;
}//指定位置修改
static int ListUpdate(PTList pv, int index, int v)
{if (pv == NULL)return 0;int count = -1;struct tagListNode* headNode = pv->nStart;while (headNode != NULL && (++count) != index - 1 && index != 0)headNode = headNode->next;headNode->v = v;return 1;
}//输出数据
static void ListPrint(PTList pv)
{if (pv == NULL)return 0;struct tagListNode* headNode= pv->nStart;while (headNode->next != NULL){printf("%4d", headNode->v);headNode = headNode->next;}printf("\n");
}//释放链表
static int ListFree(PTList *ppv)
{if (*ppv == NULL)return 0;struct tagListNode* headNode = (*ppv)->nStart;while (headNode != NULL){headNode = headNode->next;free((*ppv)->nStart);(*ppv)->nStart = headNode;}headNode = NULL;(*ppv)->nEnd = NULL;(*ppv)->nStart = NULL;(*ppv)->Size = 0;return 1;
}//测试用例
int main()
{PTList pv = NULL;//初始化ListInit(&pv);//增添数据ListAdd(pv, 3);ListAdd(pv, 13);ListAdd(pv, 6);ListAdd(pv, 30);ListAdd(pv, 5);//输出显示ListPrint(pv);ListUpdate(pv, 5, 20);ListPrint(pv);ListFree(&pv);return 0;
}

游戏筑基开发之单链表及其增删改查(C语言)相关推荐

  1. 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现

    文章目录 节点类 链表类(主要) 测试类 小结 节点类 可以根据需要,对节点属性进行修改.注意重写toString()方法,以便后续的输出操作. //节点类 class Node {public in ...

  2. 单链表实现增删改查(含头结点)

    ** 单链表实现增删改查(含头结点) ** **## 单链表** package com.Linked;public class HeadLinked {public String name;// 链 ...

  3. C语言 单链表的增删改查

    单链表的增删改查 目录 单链表的增删改查 链表的创建和输出(有头结点) 链表的查找 链表的删除 链表的修改 链表是一种最常见地采用动态存储分配方式的数据结构,相较于数组而言它更加灵活. 单链表的特点 ...

  4. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

  5. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  6. 单链表实现增删改查(进化版)

    主函数: 链表.cpp #include <bits/stdc++.h> #include "List.cpp" using namespace std; int ma ...

  7. C语言单链表实现增删改查

    1.概述 单链表使是一种链式存储结构,链表中的数据以结点的方式表示.每个结点由数据域和指针域两部分构成.数据域存储链表的数据元素,指针域存储连接相邻结点的地址. 2.单链表基本组成 typedef s ...

  8. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  9. 极其方便的使用Mybatis单表的增删改查

    [活动]Python创意编程活动开始啦!!!      CSDN日报20170427 --<如何在没有实际项目经验的情况下找到工作>      深入浅出,带你学习 Unity 目录(?)[ ...

  10. 2020-12-13# **链表的增删改查,逆置**

    链表的增删改查,逆置,长度,排序,是否为空 1.``准备阶段## ## # include<stdio.h> # include<stdlib.h>typedef struct ...

最新文章

  1. ROS中cv_bridge如何用python3进行编译
  2. R语言ggplot2可视化将两个dataframe可视化的结果组合在一起实战:combining two plots from different data.frames
  3. 【转】物料与客户主数据的税分类
  4. RTMPdump(libRTMP) 源代码分析 8: 发送消息(Message)
  5. 使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试
  6. 如何在DevSecOps道路上快速、安全地抵达终点
  7. php mysql 日期查找_PHP / MySQL存储和搜索日期
  8. 模拟退火算法介绍和实例实现
  9. 短视频从业者实操资料大全(含代运营案例+报价单+合同协议 +分镜头脚本+管理运营)共180份
  10. 【STC15】串行口1的相关寄存器解读
  11. Stanford Parser使用
  12. PS:动图加文字(二)
  13. Transformer Decoder
  14. 华为鸿蒙系统2.0是什么?Android的升级版?
  15. GPGPU-SIM(原码阅读)(流多处理器部分完成)
  16. php think addon,think-addons
  17. c语言单招程序设计解析,学生教学论文,关于单招C语言程序设计教学方法探究相关参考文献资料-免费论文范文...
  18. Crux360:新iPad专属蓝牙键盘
  19. Selenium超级详细的教程
  20. MD5加密介绍、工具类的使用

热门文章

  1. 叮~AutoML自动化机器学习入门指南,来了
  2. 【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
  3. 揭秘盒马鲜生,如何打破收益增长天花板!
  4. Presto?还是 Hive? 你们知道大数据查询性能谁更强吗?
  5. 一站式学习 Linux C语言编程
  6. 《Joel On Software》读后
  7. 【流浪地球】春节十二响程序开源代码
  8. 【keras】有关loss function的定义-返回的是`矩阵`还是`标量`
  9. 【SimpleITK】胸部CT数据3D space归一化,以及3D plot
  10. ioinic 怎样配置 android sdk,NiceFish-ionic: 这是一个移动端项目,示范Angular移动端组件库Ionic的基本用法,基于Ioinic 2.0,已支持PWA。...