直接贴代码

头文件

#ifndef __LINKLIST_H__
#define __LINKLIST_H__ typedef void LinkList;
typedef struct _tag_LinkListNode
{
LinkList* next;
}LinkListNode; LinkList* LinkList_create();
void LinkList_Destroy(LinkList* pstList);
void LinkList_Clear(LinkList* pstList);
int LinkList_Lenght(LinkList* pstList);
int LinkList_Insert(LinkList* pstList, LinkListNode* pstNode, int iPos);
LinkListNode* LinkList_Get(LinkList* pstList, int iPos);
LinkListNode* LinkList_Delete(LinkList* pstList, int iPos); #endif /* #ifndef __LINKLIST_H__ */

函数实现

/*
** 线性表的链式存储
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "LinkList.h" typedef struct _tag_LinkList
{
LinkListNode header;
int length;
}TLinkList; /**************************************************************************
** 函 数 名: LinkList_Create
** 函数作用: 创建一个链式存储的线性表
** 函数参数: void
** 返 回 值: LinkList*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
LinkList* LinkList_create()
{
TLinkList* pstRet = (TLinkList *)malloc(sizeof(TLinkList)); if (NULL != pstRet)
{
pstRet->length = ;
pstRet->header.next = NULL;
} return pstRet;
} /**************************************************************************
** 函 数 名: LinkList_Destroy
** 函数作用: 销毁一个链式存储的线性表
** 函数参数: LinkList*
** 返 回 值: void
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
void LinkList_Destroy(LinkList* pstList)
{
free(pstList);
} /**************************************************************************
** 函 数 名: LinkList_Clear
** 函数作用: 清空一个链式存储的线性表
** 函数参数: LinkList*
** 返 回 值: void
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
void LinkList_Clear(LinkList* pstList)
{
TLinkList* pstRet = (TLinkList *)pstList; if (NULL != pstRet)
{
pstRet->length = ;
pstRet->header.next = NULL;
}
return;
} /**************************************************************************
** 函 数 名: LinkList_Lenght
** 函数作用: 得到一个链式存储的线性表的长度
** 函数参数: LinkList*
** 返 回 值: int
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int LinkList_Lenght(LinkList* pstList)
{
TLinkList* pstRet = (TLinkList *)pstList;
int iRet = -; if (NULL != pstRet)
{
iRet = pstRet->length;
} return iRet;
} /**************************************************************************
** 函 数 名: LinkList_Insert
** 函数作用: 在一个链式存储的线性表的指定位置插入节点
** 函数参数: LinkList* pstList
** LinkListNode* pstNode
** int iPos
** 返 回 值: int
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int LinkList_Insert(LinkList* pstList, LinkListNode* pstNode, int iPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode* pstNodeCurrent;
int iRet = ((NULL != pstTemp) && (iPos >= ) && (NULL != pstNode));
int iLoop; if (iRet)
{
pstNodeCurrent = (LinkListNode*)pstTemp; for (iLoop = ; (iLoop < iPos) && (pstNodeCurrent->next != NULL); iLoop++)
{
pstNodeCurrent = pstNodeCurrent->next;
} pstNode->next = pstNodeCurrent->next;
pstNodeCurrent->next = pstNode;
pstTemp->length++;
} return iRet;
} /**************************************************************************
** 函 数 名: LinkList_Get
** 函数作用: 获得一个链式存储的线性表的指定位置节点
** 函数参数: LinkList* pstList
** int iPos
** 返 回 值: LinkListNode*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
LinkListNode* LinkList_Get(LinkList* pstList, int iPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode* pstNodeRet = NULL;
LinkListNode* pstNodeCur = NULL;
int iLoop; if ((NULL != pstTemp) && (iPos >= ) && (iPos <= pstTemp->length))
{
pstNodeCur = (LinkListNode*)pstTemp; for (iLoop = ; iLoop < iPos; iLoop++)
{
pstNodeCur = pstNodeCur->next;
} pstNodeRet = pstNodeCur->next;
} return pstNodeRet;
} /**************************************************************************
** 函 数 名: LinkList_Delete
** 函数作用: 删除一个链式存储的线性表的指定位置节点
** 函数参数: LinkList* pstList
** int iPos
** 返 回 值: LinkListNode*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
LinkListNode* LinkList_Delete(LinkList* pstList, int iPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode* pstNodeRet = NULL;
LinkListNode* pstNodeCur = NULL;
int iLoop; if ((NULL != pstTemp) && (iPos >= ) && (iPos < pstTemp->length))
{
pstNodeCur = (LinkListNode*)pstTemp; for (iLoop = ; iLoop < iPos; iLoop++)
{
pstNodeCur = pstNodeCur->next;
} pstNodeRet = pstNodeCur->next;
pstNodeCur->next = pstNodeRet->next;
pstTemp->length--;
} return pstNodeRet;
}

【C语言--数据结构】线性表链式存储结构的更多相关文章

  1. 数据结构(C语言版)---线性表链式存储表示

    1.单链表:线性表的链式存储. 1)特点:用一组任意的存储单元存储数据元素(存储单元可以连续,也可以不连续),逻辑上相邻的元素存储位置不一定相邻. 2)结点包括两个域:数据域(存储数据元素信息).指针 ...

  2. 线性表链式存储设计与实现 - API实现

    基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以 ...

  3. C#数据结构-二叉树-链式存储结构

    对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...

  4. 线性表链式存储方式的C语言实现

    /* 编译器:Dev-c++ 5.1.0 文件名:linkList3.cpp 代码版本号:1.0 时间:2015年9月24日11:34:16 */ #include <stdio.h> # ...

  5. 02线性表链式存储_LinkList--(线性表)

    #include "stdio.h" #include "string.h" #include "ctype.h" #include &qu ...

  6. 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现

    应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...

  7. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  9. c数据结构 -- 线性表之 复杂的链式存储结构

    复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...

随机推荐

  1. 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析

    主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表. Mysql ...

  2. [每日一讲] Python系列:字典

    #! /usr/bin/python # coding:utf-8 """ DATA STRUCTURE Container: Mapping (Another cont ...

  3. 【java工具类】生成Zip压缩包

    多文件生成压缩包,返回压缩包生成位置的路径. FileUtil.java /** * 文件打压缩包 * @param files * @param Name * @return * @throws E ...

  4. You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): shopadmin. Run 'python manage.py migrate' to apply them.

    数据库迁移时报错, You have 1 unapplied migration(s). Your project may not work properly until you apply the ...

  5. (65)CRC32校验C语言版本

    #include<iostream> # include <stdio.h> # include <string.h> typedef unsigned int u ...

  6. [spring jpa] 解决SimpleJpaRepository的多数据源配置问题

    前言 前段时间使用spring jpa做了一个项目,由于涉及到了多个数据库,因此需要进行多数据源的配置.网上找了很多的资料,尝试着配置,都以失败告终.之后通过断点最终完成了多数据源的配置.这篇博客主要 ...

  7. 简单记录一下vue生命周期及 父组件和子组件生命周期钩子执行顺序

    首先,vue生命周期可以用下图来简单理解 当然这也是官方文档的图片,详细的vue周期详解请参考这里 然而当同时存在父子组件的时候生命周期钩子是如何执行的呢? 请看下文: 加载渲染过程父beforeCr ...

  8. 大哥带的Orchel数据库时间盲注

    0X01Oracle基于延时的盲注总结 0x00 前言 oracle注入中可以通过页面响应的状态,这里指的是响应时间,通过这种方式判断SQL是否被执行的方式,便是时间盲注: oracle的时间盲注通常 ...

  9. iOS 自定义一对UI表现相反的按钮

    假如有一对按钮[重置][提交],要让他们的默认UI和点击的UI表现刚好相反 [提交]按钮,默认橙色,点击边框是橙色,字体是橙色,背景变白色 [重置]按钮,默认白色橙色,边框是橙色,点击字体是白色,背景 ...

  10. Windows下开发环境搭建

    安装Make: https://sourceforge.net/projects/gnuwin32/ 安装G++:https://sourceforge.net/projects/mingw/