直接贴代码

头文件

#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. python爬虫及结巴分词《攀登者》影评分析

    <攀登者>影评爬取及分析 0.项目结构 其中simkai.ttf为字体文件,Windows查看系统自带的字体 C:\Windows\Fonts 一.爬取豆瓣影评数据 # -*- codin ...

  2. 安装虚拟环境 virtualenv

    前言 玩python 当然需要安装虚拟环境,这样就万一有多个项目,避免会冲突,如何安装 virtualenv: 下面如下: 输入 pip list cmd 你的电脑: 然后 输入 pip list: ...

  3. 【java】并发执行ExecutorService的sumbit返回值的顺序问题

    ArrayList<Future> fl = new ArrayList<Future>(); for (int i = 0; i < 10; i++) { Future ...

  4. form表单细节

    一.表单 表单<form> 标签用于为用户输入创建 HTML 表单 表单能够包含 input 元素,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含 menus.textare ...

  5. BZOJ 2157: 旅游 (结构体存变量)

    用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include < ...

  6. [Usaco2007 Jan]Balanced Lineup排队

    [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1424 Des ...

  7. Tensorflow视频教程&Pytorch视频教程

    基于tensorflow做研究和基于pytorch做研究哪个好?哪个更容易复制代码,工业上更易用.Keras和tensorflow.pytorch的关系. Keras:Keras是一个由Python编 ...

  8. B. Uniqueness

    B. Uniqueness 给定一个序列,要求删除一段连续子段,满足删掉子段后每个元素唯一 求最小子段长度 枚举起点,二分子段长度 记得先sort 再unique #include<bits/s ...

  9. Thymeleaf 2-基础语法

    三.基础语法 1.创建HTML 由上文也可以知道需要在html中添加: <html xmlns:th="http://www.thymeleaf.org"> 这样,下文 ...

  10. jieba(结巴)常用方法

    python jieba库的基本使用   第一步:先安装jieba库 输入命令:pip install jieba jieba库常用函数: jieba库分词的三种模式: 1.精准模式:把文本精准地分开 ...