线性表的顺序存储

参考自:http://blog.csdn.net/u010187139/article/details/46659943

//
//  main.c
//  SqlListDemo
//对其改变的传地址,对其使用读取的传
//  Created by zhanggui on 15/8/11.
//  Copyright (c) 2015年 zhanggui. All rights reserved.
//

#include <stdio.h>
//定义常量 存储空间的初始化分配
#define MAXSIZE 30
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1

//typedef定义类型
typedef int  Status;
typedef int ElemType;

//定义一个结构体:存储空间的其实位置,最大容量,当前长度
typedef struct {
    ElemType data[MAXSIZE];
    int length;
    }SqList;
//初始化函数
Status initList(SqList *L)
{
    L->length = 0;
    return 0;
}
//返回线性表的长度
Status getListLength(SqList L)
{
    return L.length;
}
//判断线性表是否为空,若空返回true,否则返回false
Status listIsEmpty(SqList L)
{
    if (L.length==0) {
        return TRUE;
    }
    return FALSE;
}
//线性表清空,长度为0
Status listEmpty(SqList *L)
{
    L->length = 0;
    return OK;
}
//获取指定的元素的值,返回下标为i-1的元素,赋值给e
Status getElem(SqList L,int i,ElemType *e)
{
    //判断元素位置是否合法
    if (i>L.length||i<1) {
        printf("查找位置不正确\n");
        return ERROR;
    }
    //判断线性表是否为空
    if (listIsEmpty(L)) {
        return ERROR;
    }
    *e = L.data[i-1];
    return OK;
}
//在线性表中查找指定的e相等的元素,如果查找成功,返回元素下标,否则失败。
Status locateElem(SqList L,ElemType e)
{
    int i;
    for (i=0; i<L.length; i++) {
        if (L.data[i]==e) {
            return i;
        }
    }
    printf("没有查找到元素%d",e);
    return ERROR;
}
//自动创建一个MAXSIZE个元素,并赋值为0
Status createList(SqList *L)
{
    int i;
    for (i=0; i<MAXSIZE; i++) {
        L->data[i] = i;
    }
    L->length = MAXSIZE;
    return OK;
}
//在线性表第i个元素前插入新元素e
Status listInsert(SqList *L,int i,ElemType e)
{
    //判断长度是否可以允许插入新的数据
    if (L->length>=MAXSIZE) {
        printf("空间已满,不能再插入数据\n");
        return FALSE;
    }
    //判断长度是否可以允许插入新数据
    if (i>L->length||i<1) {
        return FALSE;
    }
    int j;
    //从后边依次后移
    for (j=L->length-1; j>=i; j--) {
        L->data[j] = L->data[j-1];
    }
    L->data[i-1] = e;
    L->length++;
    return TRUE;
}
//删除线性表中第i个元素,成功后表长减一,用e返回其值
Status deleteList(SqList *L,int i,ElemType *e)
{
    //判断线性表为空
    printf("%d",listIsEmpty(*L));
    if (listIsEmpty(*L)) {
        return ERROR;
    }
    //判断删除位置是否合法
    if (i<1||i>L->length) {
        printf("删除位置不合法");
        return ERROR;
    }
    *e = L->data[i-1];

    for (; i<L->length; i++) {
        L->data[i-1] = L->data[i];
    }
    L->length--;
    return TRUE;
}
//遍历线性表
Status listTraverse(SqList L)
{
    int i;
    for (i=0; i<L.length; i++) {
        printf("%d ",L.data[i]);
    }
    printf("\n");
    return OK;
}
int main(int argc, const char * argv[]) {
    SqList L;
    ElemType e;
    initList(&L);  //初始化
    createList(&L);  //创建
    printf("初始值:\n");
    listTraverse(L);//遍历线性表
    deleteList(&L, 1, &e);
    printf("删除后的结果:\n");
    listTraverse(L);
    listInsert(&L, 2, 3);
    printf("插入后的结果:\n");
    listTraverse(L);
    return 0;
}

源码下载地址:http://pan.baidu.com/s/1jGnecSm

时间: 2024-09-20 05:48:06

线性表的顺序存储的相关文章

大话数据结构一:线性表的顺序存储结构

1. 线性表的顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素. 2. Java实现线性表的顺序存储结构: // 顺序存储结构 public class SequenceList { private static final int DEFAULT_SIZE = 10; // 默认初始化数组大小 private int size; // 当前数组大小 private static Object[] array; public SequenceList() { init(DEF

数据结构教程 第七课 实验一 线性表的顺序存储实验

本课主题: 实验一 线性表的顺序存储实验 教学目的: 掌握顺序表的定义及操作的C语言实现方法 教学重点: 顺序表的操作的C语言实现方法 教学难点: 顺序表的操作的C语言实现方法 实验内容: 利用顺序表完成一个班级的一个学期的所有课程的管理:能够增加.删除.修改学生的成绩记录. 实验要求: 在上机前写出全部源程序.

数据结构的C++实现之线性表之顺序存储结构

线性表的数据对象集合为 {a1,a2,....an},每个元素的类型均为Datatype.其中,除第一个元素a1外,每一个元素有且 只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素.数据元素之间的关系是一对一的 关系. 线性表的顺序存储结构的优缺点: 优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间:可以快速地存取表中任一位置的元素O(1) 缺 点:插入和删除操作需要移动大量元素O(n):当线性表长度变化较大时,难以确定存储空间的容量:造成存储空间的"碎

算法速成(七)线性表之顺序存储

人活在社会上不可能孤立,比如跟美女有着千丝万缕的关系,有的是一对一,有的是一对多,有的 是多对多. 哈哈,我们的数据也一样,存在这三种基本关系,用术语来说就 是: <1>  线性关系. <2>  树形关系. <3>  网状关系. 一: 线性表 1 概念: 线性表也就是关系户中最简单的一种 关系,一对一. 如:学生学号的集合就是一个线性表. 2 特征: ① 有且只有 一个"首元素". ② 有且只有一个"末元素". ③ 除"

线性表的顺序存储结构

1.我们将实现一个顺序存储结构 经典的C语言描述的线性表顺序存储结构通常使用数组来实现的,下面我们也将用数组来实现.我们将实现线性表的增删改查的功能. 顺序存储结构操作的要点和难点其实就是数组的批量移动.因为在数组描述的顺序表中,删除操作,需要将从待删除元素的位置之后的所有元素都往前移动一位:而插入操作,需要将待插入元素的位置,包括原先在该位置的元素及其后面的元素都往前移动一位.而实现删除和插入元素的重点就在于计算出要移动多少元素和从什么位置开始移动.计算要移动多少元素通常用顺序表的长度-要移动

小菜一步一步学数据结构之(三)线性表的顺序存储结构

线性表的定义和特点 定义: 有n(n≥0)个数据特性相同的元素构成的有序序列称为线性表. 当个数n(n≥0)定于为线性表的长度,n=0时成为空表. 特点: 只有一个首结点和尾结点: 除首尾结点外,其他结点只有一个直接前驱和一个直接后继. 分析26个英文字母组成的英文表(A,B,C,D,-..,Z)数据元素都是字母,元素间关系是线性 抽象数据类型的定义为: ADT List { 数据对象:D={ai|ai∈ElemSet,i1,2,3...n,n≥0} 数据关系:R={<ai-1,ai|ai-1,

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

php线性表顺序存储实现代码(增删查改)_php技巧

复制代码 代码如下: <?php /* *文件名:linearList.php * 功能:数据结构线性表的顺序存储实现 * author:黎锦焕 * @copyright:www.drw1314.com */ class linearList { private $arr; private $length; const MAXSIZE=100; /* *构造函数,判断空表还是飞空表,并且进行实例化 * @param array $arr 输入的数组 * @param int $n 输入数组的长度

数据结构教程 第六课 线性表的顺序表示和实现

本课主题: 线性表的顺序表示和实现 教学目的: 掌握线性表的顺序表示和实现方法 教学重点: 线性表的顺序表示和实现方法 教学难点: 线性表的顺序存储的实现方法 授课内容: 复习 1.存储结构 逻辑结构   "数据结构"定义中的"关系"指数据间的逻辑关系,故也称数据结构为逻辑结构. 存储结构   数据结构在计算机中的表示称为物理结构.又称存储结构. 顺序存储结构 链式存储结构 2.线性表的类型定义 一.线性表的顺序表示 用一组地址连续的存储单元依次存储线性表的数据元素