【C语言--数据结构】线性顺序表
线性表的本质:
1.线性表(List)是零个或者多个数据元素的集合;
2.线性表中的数据元素之间是有顺序的;
3.线性表中的数据元素个数是有限的;
4.线性表中的数据元素的类型必须相同;
定义:
线性表是具有相同类型的n(>=0)个数据元素的有限序列
(a1,a2,a3.....) a1是表项,n是表长度
性质:
1.a0为线性表的第一个元素,只有一个后继
2.an为线性表的最后一个元素,只有一个前驱
3.除了a0,an外的其它元素ai,既有前驱,又有后继
4.线性表能够逐项访问和顺序存取
总结:
(1)线性表是数据元素的有序并且有限的集合
(2)线性表中的元素必须是类型相同的
(3)线性表可用于描述“队列类型”关系的问题
代码范例:
(1)头文件
#ifndef __SEQLIST_H__
#define __SEQLIST_H__ #include <stdio.h>
#include <stdlib.h>
#include <malloc.h> typedef void SeqListNode;
typedef void SeqList; /* 函数声明 */
SeqList *SeqList_Create(int iCapacity);
void SeqList_Destory(SeqList *pstList);
void SeqList_Clear(SeqList* pstList);
int SeqList_Length(SeqList* pstList);
int SeqList_Capacity(SeqList* pstList);
int SeqList_Insert(SeqList* pstList, SeqListNode *pstNode, int iPos);
SeqListNode* SeqList_Get(SeqList* pstList, int iPos);
SeqListNode* SeqList_Delete(SeqList* pstList, int iPos); #endif
(2)函数实现
/*
** 顺序存储结构的线性表
*/
#include "SeqList.h" typedef unsigned int TSeqListNode; typedef struct _tag_SeqList
{
int iCapacity;
int iLength;
TSeqListNode *node;
}TSeqList; /* 线性表相关函数的实现 */ /**************************************************************************
** 函 数 名: SeqList_Create
** 函数作用: 创建一个线性顺序表
** 返 回 值: SeqList *
** 日 期: 2017年2月13日
** 作 者: Rookie
***************************************************************************/
SeqList *SeqList_Create(int iCapacity)
{
TSeqList* pstRet = NULL; if ( <= iCapacity)
{
pstRet = (TSeqList *)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*iCapacity);
} if (pstRet != NULL)
{
pstRet->iCapacity = iCapacity;
pstRet->iLength = ;
pstRet->node = (TSeqListNode *)(pstRet + );
} return pstRet;
} /**************************************************************************
** 函 数 名: SeqList_Destory
** 函数作用: 销毁一个线性顺序表
** 返 回 值: void
** 日 期: 2017年2月13日
** 作 者: Rookie
***************************************************************************/
void SeqList_Destory(SeqList *pstList)
{
free(pstList); return;
} /**************************************************************************
** 函 数 名: SeqList_Clear
** 函数作用: 一个线性顺序表清空
** 返 回 值: void
** 日 期: 2017年2月13日
** 作 者: Rookie
***************************************************************************/
void SeqList_Clear(SeqList* pstList)
{
TSeqList* pstListTemp = (TSeqList *)pstList; if (pstListTemp != NULL)
{
pstListTemp->iLength = ;
} return;
} /**************************************************************************
** 函 数 名: SeqList_Length
** 函数作用: 获取顺序表的长度
** 返 回 值: int
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int SeqList_Length(SeqList* pstList)
{
int iRet = -;
TSeqList* pstListTemp = (TSeqList *)pstList; if (pstListTemp != NULL)
{
iRet = pstListTemp->iLength;
} return iRet;
} /**************************************************************************
** 函 数 名: SeqList_Capacity
** 函数作用: 获取顺序表的容量
** 返 回 值: int
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int SeqList_Capacity(SeqList* pstList)
{
int iRet = -;
TSeqList* pstListTemp = (TSeqList *)pstList; if (pstListTemp != NULL)
{
iRet = pstListTemp->iCapacity;
} return iRet;
} /**************************************************************************
** 函 数 名: SeqList_Insert
** 函数作用: 向线性表中插入一个节点
** 返 回 值: int
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int SeqList_Insert(SeqList* pstList, SeqListNode *pstNode, int iPos)
{
TSeqList* pstListTemp = (TSeqList *)pstList;
int iRet = (pstListTemp != NULL);
int iLoop; iRet = iRet && ((pstListTemp->iLength + ) <= pstListTemp->iCapacity);
iRet = iRet && ( <= iPos); if (iRet)
{
if (iPos > pstListTemp->iLength)
{
iPos = pstListTemp->iLength;
} for (iLoop = pstListTemp->iLength; iLoop > iPos; iLoop--)
{
pstListTemp->node[iLoop] = pstListTemp->node[iLoop-];
} pstListTemp->node[iLoop] = (TSeqListNode)pstNode;
pstListTemp->iLength++;
} return iRet;
} /**************************************************************************
** 函 数 名: SeqList_Get
** 函数作用: 获取顺序表的指定位置的值
** 返 回 值: int
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
SeqListNode* SeqList_Get(SeqList* pstList, int iPos)
{
TSeqList* pstListTemp = (TSeqList *)pstList;
SeqListNode* pstRet = NULL; if ((NULL != pstListTemp) && ( <= iPos) && (iPos <= pstListTemp->iLength))
{
pstRet = (SeqListNode*)pstListTemp->node[iPos];
} return pstRet;
} /**************************************************************************
** 函 数 名: SeqList_Delete(SeqList* pstList, int iPos)
** 函数作用: 删除顺序表的指定位置的值
** 返 回 值:
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
SeqListNode* SeqList_Delete(SeqList* pstList, int iPos)
{
TSeqList* pstListTemp = (TSeqList *)pstList;
SeqListNode* pstRet = SeqList_Get(pstList, iPos);
int iLoop; if (NULL != pstRet)
{
for (iLoop = iPos+; iLoop < pstListTemp->iLength; iLoop++)
{
pstListTemp->node[iLoop-] = pstListTemp->node[iLoop];
}
pstListTemp->node[iLoop] = (TSeqListNode)NULL;
pstListTemp->iLength--;
} return pstRet;
}
【C语言--数据结构】线性顺序表的更多相关文章
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- [Python] 数据结构--实现顺序表、链表、栈和队列
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...
- 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...
- 数据结构C语言版--动态顺序表的基本功能实现(二)
/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...
- [数据结构]C#顺序表的实现
在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- 【PHP数据结构】顺序表(数组)的相关逻辑操作
在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...
- C语言实现的顺序表
顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...
随机推荐
- oracle查询语句执行顺序
完整的查询语句类似是这样的: select ..., ROWNUM from table where <where clause> group by <columns> hav ...
- ZROI 19.08.06模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...
- entry 遍历 Map 元素
1.书写类 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class test ...
- PHP开发环境 PHP培训教程
PHP开发环境 兄弟连小编整理如下: Centos安装apache,mysql,php环境 yum -y install httpd php mysql mysql-server php- ...
- adaptiveThreshold(自适应阈值)
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thr ...
- 在windows窗口下打开文件夹
System.Diagnostics.Process.Start("Explorer.exe", @"C:\Users\gnt-wangt\Documents\Visua ...
- java中的null类型---有关null的9件事
摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...
- 2014过去了,正式步入职场了,.net
一.第一家公司(北京XXXXXXX) 从2014年7月1号拿到学位证,到7月15号到北京,努力找工作,用了两个多礼拜,终于找到了一个只有三个人的公司,愿意要我,薪资是实习三千,转正四千. 2014年7 ...
- (转)深入理解Java:注解(Annotation)自定义注解入门
向作者致敬! 转自:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在 ...
- 手动搭建redis cluster
集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点.备份节点由redis-cluster集群确定) 1.安装redis节点指定端口解压redis压缩 ...