线性表的本质:
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语言--数据结构】线性顺序表的更多相关文章

  1. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

  2. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  3. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  4. 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...

  5. 数据结构C语言版--动态顺序表的基本功能实现(二)

    /* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...

  6. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  7. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  8. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  9. C语言实现的顺序表

    顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...

随机推荐

  1. vue history模式下的微信分享

    // 微信验证 export function requireConfig() { let url = window.location.href systemApi.wxoption({ url: u ...

  2. 使用python开发WebService

    使用python开发WebService 分类: web linux2009-03-30 11:36 6621人阅读 评论(1) 收藏 举报 webservicepythonsoapimportecl ...

  3. ESP8266WiFiGeneric---通用库--事件和配置

    ESP8266WiFiSTAClass .ESP8266WiFiScanClass .ESP8266WiFiAPClass 可以访问 ESP8266WiFiGenericClass的private和p ...

  4. 【leetcode&CN&竞赛】1196.How Many Apples Can You Put into the Basket

    题目如下: 楼下水果店正在促销,你打算买些苹果,arr[i] 表示第 i 个苹果的单位重量. 你有一个购物袋,最多可以装 5000 单位重量的东西,算一算,最多可以往购物袋里装入多少苹果. 示例 1: ...

  5. CSS无图片三角形

    border:6px solid #f2f2f2; border-color:#999 transparent transparent transparent; border-style:solid ...

  6. JedisCluster和springboot整合

    maven依赖 springboot整合jedisCluster相当简单,maven依赖如下: <dependency> <groupId>org.springframewor ...

  7. Oracle删除表空间报ORA01548

    由于undo表空间设置了自动增长,导致替换了好几个undo表空间,就想把原先的undo表空间删掉腾出空间 但删的时候报错 SQL> drop tablespace undotbs1 includ ...

  8. es索引基本操作(1)

    1:创建索引 创建索引的时候可以通过number_of_shards和number_of_replicas来指定当前索引的分片和副本数量: PUT demo_index1   {     " ...

  9. android sp文件一个键值保存多条信息

    之前碰到过这样的问题,sp文件只能够append,或者清空.其实一个键值,通过,分割,或者替代可以实现多条信息的存储.下面是一个举例: package com.ctbri.weather.utils; ...

  10. SpringMVC拦截器+Spring自定义注解实现权限验证

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...