【C语言--数据结构】线性表链式存储结构
直接贴代码
头文件
#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语言--数据结构】线性表链式存储结构的更多相关文章
- 数据结构(C语言版)---线性表链式存储表示
1.单链表:线性表的链式存储. 1)特点:用一组任意的存储单元存储数据元素(存储单元可以连续,也可以不连续),逻辑上相邻的元素存储位置不一定相邻. 2)结点包括两个域:数据域(存储数据元素信息).指针 ...
- 线性表链式存储设计与实现 - API实现
基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以 ...
- C#数据结构-二叉树-链式存储结构
对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...
- 线性表链式存储方式的C语言实现
/* 编译器:Dev-c++ 5.1.0 文件名:linkList3.cpp 代码版本号:1.0 时间:2015年9月24日11:34:16 */ #include <stdio.h> # ...
- 02线性表链式存储_LinkList--(线性表)
#include "stdio.h" #include "string.h" #include "ctype.h" #include &qu ...
- 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
- c数据结构 -- 线性表之 复杂的链式存储结构
复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...
随机推荐
- Python之网路编程之线程介绍
一.什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才 ...
- MYSQL<一>
-- ########## 01.数据库概述 ########## -- 1.信息:现实世界中各种可以接触到的东西 -- 2.数据:信息在计算机世界中的映射(反映) -- Java中可以把数据存储在内 ...
- 解决jmeter 请求参数中文乱码
今天在用jmeter 写脚本时发现查看结果树request post请求中文参数值是乱码,故记录下解决过程. 解决过程如下: 1.修改本地配置文件 因为此处的数据,还没有发送出去,所以,肯定是这个变量 ...
- 关于python pip安装第三方库 jieba 中文分词工具后提示"ImportError: cannot import name 'Random'"报错问题
具体错误提示如下: >>> import jieba Traceback (most recent call last): File "<stdin>" ...
- linux-selinxu---性能 -8
sed -ri.bk '/^SELINUX=/s/(SELINUX=)(.*)/\1disabled/' /etc/selinuconfig 修改并备份 脚本打开关闭 selinux if [[ &q ...
- 微信浏览器video播放视频踩坑
video属性介绍 iOS的属性 playsinline On iPhone, video playsinline elements will now be allowed to play inlin ...
- Mybatis学习笔记之---CRUD(增删改查)
Mybatis的CRUD(增删改查) 1.pom.xml <dependencies> <dependency> <groupId>junit</groupI ...
- pythonCSV模块
在爬虫过后会取得很多信息! 将信息存起来方法还很多中!今天提一下CSV模块 导入模块 import csv 这里先写个列表 rows = [['zhangsan',20],['lisi',22],[' ...
- Python3学习笔记(八):集合
集合(set)是一种可变的无序的不重复的数据类型 要创建集合,需要将所有项(元素)放在花括号({})内,以逗号(,)分隔. >>> s = {'p','y','t','h','o', ...
- Qt数据库之数据库连接池
前面的章节里,我们使用了下面的函数创建和取得数据库连接: void createConnectionByName(const QString &connectionName) { QSql ...