美文网首页数据结构
数据结构——顺序表

数据结构——顺序表

作者: 翼动晴空 | 来源:发表于2017-05-14 12:38 被阅读25次

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

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

(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);
    } 

}

相关文章

  • 【数据结构】线性表之单链表

    完整代码需结合前面一篇顺序表数据结构学习-线性表之顺序表各种操作网易云课堂小甲鱼课程链接:数据结构与算法 线性表的...

  • 2.6 数据结构 --1.4 链表

    数据结构子目录https://www.jianshu.com/p/a344fa483655 顺序表 顺序表按照存储...

  • 带头结点的链表

    1、链表和顺序表 链表是很常见的数据结构,链表总是会和线性顺序表来比较。 1.1、顺序表 具有随机存储的特性,给定...

  • 【数据结构】单链表(Singly Linked List ) &

    更多精彩尽在微信公众号【程序猿声】 数据结构-线性表|顺序表|链表(中) 本节纲要 预备知识 顺序表(Sequen...

  • Java造轮子-数据结构-线性表

    数据结构-线性表 @(数据结构) 线性表是数据结构中的逻辑结构。可以存储在数组上,也可以存储在链表上。 顺序表(数...

  • 数据结构之线性表的链式存储结构

    之前写了线性表的顺序存储结构和有序线性表的顺序存储结构,今天接着写线性表的链式存储结构 数据结构之线性表的顺序存储...

  • 数据结构-线性表

    [TOC] 线性表-List list是最简单的数据结构,可分为顺序表与链表,顺序表内部数据存储由数组实现,链表则...

  • 数据结构

    数据结构 数据结构概念 顺序表 链表 队列 栈 二叉树 常用排序算法

  • python中的树数据结构

    线性数据中的典型顺序表和链表已经讲完: 《顺序表数据结构在python中的应用》 《python实现单向链表数据结...

  • josephus问题

    线性表是数据结构的中很常见的结构,其中一种就是顺序表,python已经内置了顺序表。list就是循序表的的实现。下...

网友评论

    本文标题:数据结构——顺序表

    本文链接:https://www.haomeiwen.com/subject/nscqxxtx.html