【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语言实现的顺序表
顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...
随机推荐
- Python之模块和包补充
包的补充 1.包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间 2.常见目录结构 1 import os 2 os.makedirs('glance/api') 3 os.maked ...
- canvas实现圆角图片 (处理原图是长方形或正方形)
/** * 生成图片的缩略图 * @param {[type]} img 图片(img)对象或地址 * @param {[type]} width 缩略图宽 * @param {[type]} hei ...
- H5开发获取微信系统的地址列表
前段时间做了H5开发的项目,需要是要把微信系统自带的地址也给添加进来,意识也就是说用户可以选择项目的地址和微信自带的地址 效果图是这样的: 对就是这个需求 下面给出H5 页面下的微信添加HTML 然 ...
- JAVA笔记19-容器之三 Set接口、List接口、Collections类、Comparable接口(重要)
一.Set接口 //HashSet综合举例 import java.util.*; public class Test{ public static void main(String[] args){ ...
- c++linux多线程基础知识
http://blog.csdn.net/lovecodeless/article/details/24929273 http://blog.csdn.net/Jiangweihll/article/ ...
- Electron开发使用Vue Devtools
转自 [https://orchidflower.oschina.io/2017/03/29/Using-Vue-Devtools-in-Electron/] 2.2 安装步骤 首先在Chrome中安 ...
- Mapnik连接文件数据、数据库中的vertor数据和raster数据
Mapnik的XML文件,选择其中一个Datasource. <?xml version="1.0" encoding="utf-8"?> < ...
- 8. ClustrixDB 监控
一. 列出集群中当前会话 sql> select * from system.sessions\G 二. 显示CPU利用率.磁盘读/写利用率和缓冲区缓存失误率 MySQL [system]> ...
- linux system函数引发的错误
转: https://my.oschina.net/renhc/blog/54582 先看一下问题 简单封装了一下system()函数: int pox_system(const char *cm ...
- 【java工具类】生成二维码
/** * 生成二维码图片 * @param text 扫描二维码后跳转的url * @param width 图片宽度 * @param height 图片高度 * @param filePath ...