【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之面向对象之反射、内置方法
一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...
- vue项目history模式下微信分享相关问题
import wx from '@/utils/wx' import { shareApi } from '@/api' // 微信验证 export function requireConfig() ...
- shred命令
不做陈冠希必备.... shred --help 用法:shred [选项]... 文件... Overwrite the specified FILE(s) repeatedly, in order ...
- 【crontab】误删crontab及其恢复
中秋节快到了,首先祝自己中秋快乐. 昨天下午六点,心里正想着加完一个crontab就可以下班了.本来想执行 crontab -e的,没想到手一抖就输入了crontab ,然后就进入了下面这个样子.
- 导入本地Excel到DataSet中
/// <summary> /// 导入本地Excel到DataSet中 /// </summary> /// <param name="strFileSour ...
- [THUSC2017]大魔法师:线段树
分析 在线段树上用\(4 \times 4\)的矩阵打标记. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int ...
- Python进制转换format格式化
进制转换:先介绍用传统数学方法,再介绍用python内置方法 二进制转十进制: 1101 转为十进制 1*2^(4-1)+1*2^(3-1)+0*2^(2-1)+1*2^(1-1) 即各个位拆开,乘以 ...
- 基于DRF的图书增删改查练习
功能演示 信息展示 添加功能 编辑功能 删除功能 DRF构建后台数据 本例的Model如下 from django.db import models class Publish(models.Mode ...
- 一、Appium+python环境搭建
一.环境准备 1.jdk1.8. (64位) 2.android-sdk_r24.3.4-windows 3.python:2.7(3.6也可以) 4.appium:1.4.13.1 5.Node.j ...
- 在vi vim中使用正则表达式与 普通perl正则的区别?
参考这篇文章很好 vim中的正则表达式常用的命令有种, 即搜索和替换 /: 搜索 :s 替换 在vim中的正则表达式和perl编程的正则表达式还是有区别的: 正则表达式中的内容包括: 字面字符... ...