线性表的本质:
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. 聚合函数 Aggregate Function

    聚合函数是用来统计每个分组的统计信息,它们要跟 group by 一起使用,用来将每个分组所有数据 聚合 成一条统计数据. 包括 max/min/count/avg/sum 等. -- 按照部门进行分 ...

  2. Linux系统中的硬件问题如何排查?(3)

    Linux系统中的硬件问题如何排查?(3) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  3. 玩蛇记之用python实现易宝快速支付接口

    玩蛇记之用python实现易宝快速支付接口 现在很多这种快速支付的通道,易宝支持的通道算是很全面的,正好最近需要集成易宝的支付通道到平台中,所以写一贴来记录一下,顺便鄙视一下国内的支付平台,api的支 ...

  4. print的位置差异

    第一种,for循环和print是同级的,只有当for循环结束了才会print d=[]for i in range(1, 101): d.append(i)print d[6::7] 第二种,也就是p ...

  5. 【NOIP2014模拟11.3】蛋糕

    题目 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力.现在Bessie要把蛋糕横 ...

  6. vue学习-day04(路由)

    目录: 1.组件传值-父组件向子组件传值和data与props的区别    2.组件传值-子组件通过事件调用向父组件传值          3.案例:发表评论.使用ref获取DOM元素和组件引用   ...

  7. MongoDB操作:insert()

    @Override public boolean inSert(String dbName, String collectionName, String[] keys, Object[] values ...

  8. 【canvas学习笔记六】状态保存和变换

    save()和restore() save() 保存当前状态,将当前canvas的状态存入栈中. restore() 恢复之前save的一个状态,将之前的状态从栈中弹出. 保存的当前状态包含以下信息: ...

  9. Selenium 多窗口切换

    我们在操作网页的时候,点击有些页面的链接,会重新打开一个窗口,我们要在新页面上操作,就得切换窗口 比如在百度首页的登录框点击注册,会重新打开一个注册的新页面,要在新页面注册,就得先切进新页面 那我们怎 ...

  10. 学习日记21、IE下的Ajax需要注意的地方

    上面这张图片我是封装了一个easyui下拉框,红框出则是动态传入的json数据,这串代码在google下运行不会有任何问题,但是在IE下运行则会提示缺少:,这是因为IE只识别json格式的数据,所以这 ...