线性表有2种,分为顺序表和链表。
  顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定)
  链表: 有3种,单链表、双向链表、循环链表(长度不固定)

seqList.h
#ifndef SEQLIST_H
#define SEQLIST_H

#include <stdio.h>
#include <malloc.h>

typedef enum
{
    OK=, //正确
    ERROR=,   //出错
    TRUE=,  //为真
    FALSE=   //为假
}status;

typedef int ElemType;   //宏定义队列的数据类型

#define initSize    20  //线性表存储空间的初始大小

//顺序表的结构
typedef struct
{
    //静态顺序表:使用动态分配的指针方式
    ElemType *data; //顺序表的数据元素指针,指向存放数据元素存储空间的基地址
    int length; //顺序表的长度
    int maxSize;    //顺序表的最大容量
}seqList;

//创建顺序表   pSeqList-顺序表对象指针  elemSize-线性表的初始存储容量
status initList(seqList *pSeqList,int elemSize);

//销毁顺序表
void destroyList(seqList *pSeqList);

//清空顺序表: 将长度清零即可
status clearList(seqList *pSeqList);

//判断顺序表是否为空
status isEmpityList(seqList *pSeqList);

//在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入
//将原先的第i个元素以及后面所有元素都后移一个位置
status enList(seqList *pSeqList, int i, ElemType element);

//删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移
status deList(seqList *pSeqList,int i,ElemType *element);

//遍历队列
void listTraverse(seqList *pSeqList);

#endif // SEQLIST_H
seqList.c
#include "seqlist.h"

/*********************************************
 * 线性表有2种,分为顺序表和链表。
 * 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定)
 * 链表: 有3种,单链表、双向链表、循环链表(长度不固定)
 *********************************************/

 //创建顺序表   pSeqList-顺序表对象指针  elemSize-线性表的初始存储容量
status initList(seqList *pSeqList,int elemSize)
{
    //给顺序表的
    pSeqList->data = (ElemType *)malloc(sizeof(ElemType)*elemSize);
    if(!pSeqList->data)
    {
        printf("pSeqList->data malloc error!\n");
        return ERROR;
    }

    pSeqList->length = ;   //最开始,顺序表的元素个数为0,即长度为0
    pSeqList->maxSize = elemSize;

    return OK;
}

//销毁顺序表
void destroyList(seqList *pSeqList)
{
    free(pSeqList->data);
    pSeqList->data = NULL;
}

//清空顺序表: 将长度清零即可
status clearList(seqList *pSeqList)
{
    if(!pSeqList->data) //检验顺序表的数据元素指针是否为空
    {
        pSeqList->length = ; //将长度清零
    }

    return OK;
}

//判断顺序表是否为空
status isEmpityList(seqList *pSeqList)
{
    )
        return TRUE;

    return FALSE;
}

//在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入
//将原先的第i个元素以及后面所有元素都后移一个位置 (i=0,即删除第一个元素)
status enList(seqList *pSeqList,int i,ElemType element)
{
    int len = pSeqList->length; //获得线性表的长度

    //i的范围限制为0-len+1(原先长度为len,现在为len+1)
     || i>len+)
    {
        printf("i is false!\n");
        return ERROR;
    }

    //将原先的第i个元素以及后面所有元素都后移一个位置
    ;j>=i;j--)
    {
        pSeqList->data[j+] = pSeqList->data[j];
    }

    pSeqList->data[i] = element;    //在i的位置上,下标为i-1,插入新元素element
    pSeqList->length++; //线性表的长度+1

    return OK;
}

//删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移
status deList(seqList *pSeqList,int i,ElemType *element)
{
    int len = pSeqList->length; //获得线性表的长度

    //i的范围限制为0-len+1(原先长度为len,现在为len+1)
     || i>len+)
    {
        printf("i is false!\n");
        return ERROR;
    }

    *element = pSeqList->data[i];

    //将被删元素之后的元素逐个前移
    ;j<len;j++)
    {
        pSeqList->data[j-] = pSeqList->data[j];
    }

   pSeqList->length--; //线性表的长度-1

    return OK;
}

//遍历队列
void listTraverse(seqList *pSeqList)
{
    //如果队列为空
    if(isEmpityList(pSeqList)==TRUE)
    {
        printf("\nqueue is NULL!\n");
    }

    printf("listTraverse: ");
    ;i<pSeqList->length;i++)
    {
        printf("%d  ", pSeqList->data[i]);
    }
    printf("\n");
}
main.c
/*********************************************
 * C实现顺序表   2017/10/26   by nieXianFeng
 *********************************************/
#include <stdio.h>
#include "seqlist.h"

int main()
{
    int value;          //用于保存删除的元素

    seqList *pSeqList = (seqList*)malloc(sizeof(seqList));
    if(!pSeqList) //检测是否申请失败
    {
        printf("pSeqList malloc error!\n");
        ;
    }

    //调用初始化队列的函数
    initList(pSeqList,initSize);
    //调用出队函数
    enList(pSeqList,,);
    enList(pSeqList,,);
    enList(pSeqList,,);
    //调用遍历队列的函数
    listTraverse(pSeqList);

    //调用出队函数
    ,&value)==OK)
    {
        printf("出队一次,元素为:%d\n", value);
    }
    //调用遍历队列的函数
    listTraverse(pSeqList);

    ;
}
												

数据结构之动态顺序表(C实现)的更多相关文章

  1. 数据结构C语言版--动态顺序表的基本功能实现(二)

    /* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...

  2. 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表

    一.基本概念: 线性表:由n个类型相同的数据元素组成的有限序列,记为(a1,a2,--an). 线性表的特征:其中的元素存在这序偶关系,元素之间存在着严格的次序关系. 顺序存储表:线性表中的元素依次存 ...

  3. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  4. C++实现动态顺序表

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...

  5. C++数据结构学习之顺序表

    顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...

  6. 动态顺序表(C++实现)

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...

  7. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

  8. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  9. 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)

    1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...

随机推荐

  1. fzu 2113 数位dp

    #include<stdio.h> #include<string.h> #define N 20 #define ll __int64 ll dp[N][N];//最多记忆4 ...

  2. 无法打开物理文件 "X.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误: 5120)解决

    环境 SQLServer 2008 R2 问题 附加数据库出现“无法打开物理文件 "X.mdf".操作系统错误 5:"5(拒绝访问.)". (Microsoft ...

  3. <项目><day11>查看用户浏览过的商品

    <项目>查看用户浏览过的商品 1.创建一个entity包储存实体对象 1.1创建一个Product的类存储实体对象 对象具有以下属性,并添加set和get方法,含参和不含参的构造方法,to ...

  4. Android GIS开发系列-- 入门季(9) 定位当前的位置

    利用MapView定位当前的位置 这里要用到Arcgis中的LocationDisplayManager这个类,由于比较简单.直接上代码: LocationDisplayManager locatio ...

  5. mysql 排序order by可以根据权重,进行表达式计算。再排序

    1.select * from tbl_actor order by (follower_count+Recommend_weight)*weight_ratio desc limit 3; 2.or ...

  6. Linux 下添加 Eclipse 桌面图标

    1. sudo gedit  /usr/share/applications/eclipse.desktop 2. 向eclipse .desktop中添加以下内容: [Desktop Entry] ...

  7. ubuntu下vim及man帮助文档的汉化

    vim是一个功能超级强大的编辑器,当然我们也可将它配置超强的IDE.这类教程网上非常多,我就不再此赘述了. 我们在使用中对不熟悉的命令,不熟悉的插件的使用方法常常须要查看文档,全英文环境确实看着人头都 ...

  8. Office 针式打印机如何调节边距

    1 右击针式打印机,选择"打印机属性"   2 点击"打印机参数设置"选项卡,之前打印出来如果发现上下距离不合适,可以通过调节但也纸页顶距来调整   该参数值可 ...

  9. 【智能路由器】让MT7620固件openwrt支持USB

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 首先确定硬件有USB,这个得检查板子是否引出了usb口,一 ...

  10. 05-图1. List Components (25)

    05-图1. List Components (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue For a ...