文档章节

数据结构——顺序表

翼动动空
 翼动动空
发布于 2016/05/08 21:30
字数 645
阅读 1267
收藏 1
点赞 2
评论 0

顺序表:采用顺序存储方式的线性表称为顺序表

顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素,由于是依次存放的,因此只要知道顺序表的首地址及数据元素所占的存储长度,就容易计算出任何一个元素的位置

(1)定义顺序表的结构

#include <stdio.h>
#include <string.h>

#define MAXSIZE 100 //定义顺序表最大长度


typedef struct { //定义数据类型
    char key[15];
    char name[20];
    int age;
} DATA;

typedef struct {
    DATA ListData[MAXSIZE+1]; //保存顺序表数组
    int ListLen; //顺序表已存节点的数量
} SeqListType;

(2)定义顺序表操作

void SeqListInit(SeqListType *SL); //初始化顺序表
int SeqListLength(SeqListType *SL); //返回顺序表的元素数量
int SeqListAdd(SeqListType *SL, DATA data); //向顺序表中添加元素
int SeqListInsert(SeqListType *SL, int n, DATA data); //向顺序表中插入元素
int SeqListDelete(SeqListType *SL, int n); //删除顺序表中的数据元素
DATA *SeqListFindByNum(SeqListType *SL, int n); //根据序号返回元素
int SeqListFindByKey(SeqListType *SL, char *key); //按关键字查找
int SeqListAll(SeqListType *SL); //遍历顺序表的内容

(3)顺序表操作

/*
 *初始化顺序表
 * */
void SeqListInit(SeqListType *SL)
{
    SL->ListLen = 0; //设置顺序表长度为0
}

/*
 *返回顺序表的元素数量
 * */
int SeqListLength(SeqListType *SL)
{
    return (SL->ListLen);
}

/*
 *向顺序表中添加元素
 * */
int SeqListAdd(SeqListType *SL, DATA data)
{
    if (SL->ListLen >= MAXSIZE) {
        printf("顺序表已满,不能再添加节点!\n");
        return 0;
    }

    SL->ListData[++SL->ListLen] = data;
    return 1;
}

/*
 *向顺序表中插入元素
 * */
int SeqListInsert(SeqListType *SL, int n, DATA data)
{
    int i;
    if (SL->ListLen >= MAXSIZE) {
        printf("顺序表已满,不能再添加节点!\n");
        return 0;
    }

    if (n<1 || n>SL->ListLen-1) {
        printf("插入节点序号错误,不能插入元素!\n");
        return 0;
    }

    for (i=SL->ListLen; i>=n; i--) {
        SL->ListData[i+1] = SL->ListData[i];
    }   

    SL->ListData[n] = data;
    SL->ListLen++;

    return 1;
}

/*
 *删除顺序表中的数据元素
 * */
int SeqListDelete(SeqListType *SL, int n)
{
    int i;

    if (n<1 || n>SL->ListLen+1) {
        printf("删除节点序号错误,不能删除节点!\n");
        return 0;
    }

    for (i=n; i<SL->ListLen; i++) {
        SL->ListData[i] = SL->ListData[i+1];
    }

    SL->ListLen--;
    
    return 1;
}

/*
 *根据序号返回元素
 * */
DATA *SeqListFindByNum(SeqListType *SL, int n)
{
    if (n<1 || n>SL->ListLen+1) {
        printf("节点序号错误,不能返回节点!\n");
        return NULL;
    }   

    return &(SL->ListData[n]);

}

/*
 *按关键字查找
 * */
int SeqListFindByKey(SeqListType *SL, char *key)
{
    int i;

    for (i=1; i<=SL->ListLen; i++) {
        if (strcmp(SL->ListData[i].key, key) == 0) 
            return i;
    }

    return 0;
}

/*
 *遍历顺序表的内容
 * */
int SeqListAll(SeqListType *SL)
{
    int i;

    for (i=1; i<=SL->ListLen; i++) {
        printf("(%s,%s,%d)\n", SL->ListData[i].key, SL->ListData[i].name, SL->ListData[i].age);
    } 

}

 

 

© 著作权归作者所有

共有 人打赏支持
翼动动空
粉丝 15
博文 69
码字总数 36207
作品 0
成都
程序员
数据结构课程主页-2016级

  新学期,再度起程!   翻转的数据结构课程再度迎来新的一批同学。   前两年,资源建设基本完备,课堂方案逐渐完善,同学们对新型的学习方式设计给予了肯定(参见2014级问卷调查和201...

sxhelijian
2017/08/30
0
0
由浅入深探究 MySQL索引结构原理、性能分析与优化

欢迎关注微信号:neihanrukou 第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅...

fzxu_05
2015/10/15
170
0
数据结构/算法——线性表*

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,...

cjun1990
2015/09/24
73
0
线性表的链式和顺序存储问题

最近看数据结构,关于线性表的链式和顺序存储的利弊,其中书上和我查的资料上都说,链式存储在执行插入和删除操作时开销较小,作为一个完整的操作,链式存储和顺序存储插入和删除操作时间复杂...

横着走的螃蟹
2013/05/07
282
4
总结的sql server导数据的几种办法

在日常开发中,经常接触到数据的导出导入。以本机开发数据库部署到服务器数据库上为例作说明。 1.最简单的方式是,把需要导出数据库的.MDF和.LDF文件复制到服务器上,然后再服务器上的sqlse...

晨曦之光
2012/04/26
159
0
iptables防火墙的基本配置

在Internet中,通过架设各种服务器为用户提供各种网络服务,怎样保护这些服务器,过滤恶意的访问、入侵呢?这里主要介绍Linux系统中的防火墙——netfilter和iptables,包括防火墙的结构和匹配...

杨书凡
01/02
0
0
数据结构——线性表概述

线性表:由零个或多个数据元素组成的有限序列 特征: 1、是一个序列,元素之间有先来后到 2、有且只有一个“首元素”,它没有直接前驱,只有一个直接后继 3、有且只有一个“末元素”、它没有...

翼动动空
2016/05/08
1K
0
史上最简单的 MySQL 教程(三十六)「数据备份与还原(中)」

数据备份与还原 基础概念: 备份,将当前已有的数据或记录另存一份; 还原,将数据恢复到备份时的状态。 为什么要进行数据的备份与还原? 防止数据丢失; 保护数据记录。 数据备份与还原的方...

qq_35246620
2017/10/01
0
0
数据结构和算法之一——线性表_2_顺序结构存储

线性表存储结构分类 线性表有两种物理存储结构:1)顺序存储结构;2)链式存储结构 顺序存储结构 2.1定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。...

Eric_Hunter
01/11
0
0
数据结构 线性表的实现(2) ——基本操作

在数据结构 线性表的实现(1) ——创建与销毁 中,简要的说明了顺序表的声明、初始化和销毁。对于我们使用者来说,顺序表中最重要的就是对于线性表的操作 向顺序表中添加数据元素,每次都添加...

心扬
04/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部