【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语言实现的顺序表
顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...
随机推荐
- ZROI 19.08.07模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 ...
- ZROI 19.08.01 生成函数方法
写在前面:由于我数学基础不好,加上缺乏生成函数知识,所以这一下午我都处在掉线和非掉线的叠加态.而且我写\(\LaTeX\)很慢,所以笔记相当混乱而且不全面.说白了就是我太菜了听不懂. 1.一般生成函数 ...
- 【python基础】元组方法汇总
一.定义 用于存储一组数据的有序序列, 一旦创建, 元组中的各个元素不允许修改 二.特点 1.元组有序; 2.元组是不可变的数据类型;不可修改; 3.元组中可以存储重复的数据; 4.元组中可以同时存储 ...
- linux系统下导出MySQL文件
1.配置:从centOS6.5系统,MySQL数据库 2.导出.sql文件的命令: mysqldump -uroot -h116.228.90.147 -P18006 -p aimo > /ho ...
- 操作系统——HugePage
TLB:页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令.数据.为了减少因为MMU导致的处理器性能下降 ...
- 介绍HTML5几种存储方式
总体情况 h5之前,存储主要是用cookies.cookies缺点有在请求头上带着数据,大小是4k之内.主Domain污染. 主要应用:购物车.客户登录 对于IE浏览器有UserData,大小是64k ...
- 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径
//bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...
- navicat安装与激活
原文网址:https://www.jianshu.com/p/5f693b4c9468?mType=Group 一.Navicat Premium 12下载 Navicat Premium 12是一套 ...
- D. Print a 1337-string...
D. Print a 1337-string... 输出一个字符串 里面包含n个子序列 1337 #include<bits/stdc++.h> using namespace std; ...
- [CSP-S模拟测试]:数列(数学)
题目传送门(内部题95) 输入格式 第一行三个整数$n,a,b$,第二行$n$个整数$x_1\sim x_n$表示数列. 输出格式 一行一个整数表示答案.无解输出$-1$. 样例 样例输入:2 2 3 ...