数据结构——线性表之顺序表

定义 :顺序表是由一段连续的储存单元存储数据的一种简单的数据结构形式,其优点在于快速的查找存储单元的值,缺点在于

时间复杂度 :查找:O(1),插入和删除:O(n);

对于清华大学《数据结构》——做出自己的理解;(用实例来理解抽象的事物)

假设,一次期末的成绩考试完后,老师需要将同学们的成绩输入到学校的系统内部去,同时能够改写成绩,添加学生等操作。

ADT{

    数据对象      

typedef struct
{
	char Name[Len];//学生的名字
	int Grade;//成绩
}Student;

typedef struct//基本结构
{
	Student *elem;//存储单元地址
	int length;//当前长度
	int listsize;//预设长度
}Sqlist;

    基本操作:

      List_Init(Sqlist &L);//对链表初始化

void List_Init(Sqlist &L)
{
    L.elem = (Student*)(malloc(LIST_SIZE * sizeof(Student)));//C语言的开辟空间的方式。
    if (List_Empty(L))
        return;
    else//初始化值
    {
        L.length = 0;
        L.listsize = LIST_SIZE;
    }
}

        List_Empty(L)//取决于你对空的解释。

bool List_Empty(Sqlist L)
{
    return L.elem == NULL;
}

        List_Add_Insert(Sqlist &L , int coordinate , int newponit)//对链表添加和加入//如果对插入的算法不了解可以参考——这里

void List_Add_Insert(Sqlist &L, int coordinate , Student newpoint)
{
    if (coordinate < 1 || coordinate > L.length + 1)//插入的位置是否合法
    {
        cout << "插入的位置超出范围" << endl;
        return;
    }
    if (L.length >= L.listsize)//如果开辟的空间已满,则添加新的空间
    {
        Student *newbase = (Student*)realloc(L.elem, (L.listsize + LIST_SIZE) * sizeof(Student));
        if (newbase == NULL)//每次开辟空间后一定要检查是否成功,因为开辟空间是从堆中找到比你需要空间略大的空间然后赋地址的,如果找不到比你需要空间大的,则会失败。
            return;
        L.elem = newbase;
        L.listsize += LIST_SIZE;
    }
    Student *q = &L.elem[coordinate - 1];
    for (Student *p = &L.elem[L.length - 1]; p >= q; p--)//先把位置移动一位,腾出插入点的位置。
        *(p + 1) = *p;
    strcpy(q->Name, newpoint.Name), q->Grade = newpoint.Grade;//改变值
    ++L.length;//当前值增长
}

       List_Change(Sqlist &L)//和List_Get(Sqlist)相差无几,后面我就不另加叙述了。

void List_Change(Sqlist &L, int coordinate, Student newpoint)
{
    L.elem[coordinate - 1].Grade = newpoint.Grade;
}

        List_Erase(Sqlist &L , int coordinate)//删除位于coordinate位置的值。

void List_Erase(Sqlist &L, int coordinate)
{
    if (coordinate < 1 || coordinate > L.length)//删除位置超出范围
    {
        cout << "插入的位置超出范围" << endl;
        return;
    }
    Student *p = &L.elem[coordinate - 1];
    Student *q = &L.elem[L.length - 1];
    for (++p; p <= q; p++)//将删除位置进行覆盖
        *(p - 1) = *p;
    --L.length;//当前长度减少
}

       List_Length(Sqlist L)//得到链表现有长度——由于过于简单和可以用L.length直接表示,所以感觉作用不到大。

int  List_Length(Sqlist L)
{
    return L.length;
}

       List_Clear(Sqlist &L)//将链表原有值清空.

void List_Clear(Sqlist &L)
{
    for (int i = 0; i < L.length; i++)
        L.elem[i].Grade = 0, strcpy(L.elem[i].Name, "0");
}

}

时间: 2024-08-09 21:42:34

数据结构——线性表之顺序表的相关文章

《数据结构》复习之线性表(顺序表和链表)

线性表的概念 线性表的比较 线性表的数据结构 顺序表的算法操作 双链表的补充 总结 1.线性表的概念 线性表的存储结构有顺序存储结构和链式存储结构两种.前者成为顺序表,后者称为链表. 顺序表: 顺序表就是把线性表中的所有元素按照其逻辑顺序,一次存储到从指定的存储 位置开始的一块连续的存储空间中,如下图所示. 链表 在链表的存储中,每一个节点不仅包含所存元素本身的信息,还包含元素之间的逻辑关系的信息,即前驱节点包含后继节点的地址信息,这样就可以通过前驱节点中的地址信息方便地找到后继节点的位置,如下

[C++] 数据结构(C):线性表之顺序表

1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + Status GetElement(SeqList L, int i, ElementType &e) (按位)取值  + int LocateElement(SeqList L, ElementType e) (按值)查找  + Status ListInsert(SeqList &L, int i, ElementType e) (按位)插入  + Status ListDelet

数据结构-线性表_顺序表

进入大学一年了,今日终于有勇气写写随笔并展示出来了. 如有不足之处,请大家指正. 今日我想写的就是我对数据结构-线性表_顺序表的理解. 不BB了,进入正题!!!!! 数据结构中的逻辑结构分为线性结构和非线性结构,而线性表就属于线性结构. 线性结构是 n 个数据元素的有序(次序)集合,它有下列几个特征: 集合中必存在唯一的一个 "第一个元素": 集合中必存在唯一的一个 "最后的元素": 除最后元素之外,其它数据元素均有唯一的 "后继": 除第一元素

数据结构-02 _用顺序表解决线性表的编程问题

看到这个标题,相必最先应该只到什么是顺序表,什么是线性表. 线性表(linear list):由n(n>=0)个相同的数据类型的数据元素(结点)a0,a1,a2,...an-1 组成的有限序列. 顺序表:把线性表的结构按照逻辑顺序存放在一组地址连续的存储单元里,用这种方式存储的线性表简称顺序表. 线性表的基本操作: 1.初始化操作 2.插入操作:InsertNode(T a,int i) 在线性表的第i个位置插入一个值为a的新元素,使得原序号为i,i+1,...,n 的数据元素的序号变成i+1,

【算法和数据结构】_17_小算法_线性结构:顺序表

/* 本程序用来测试数据结构中的线性结构:顺序表 */ #include <stdio.h> #include <stdlib.h> #define LINEAR_MAX_SIZE 64 struct LinearList { int* List; //顺序表指针 unsigned short int ListLen; //顺序表最大的元素个数 unsigned short int CurrentLen; //顺序表当前元素的个数 }; typedef struct LinearL

数据结构Java实现02----线性表与顺序表

[正文] 本节内容: 线性结构 线性表抽象数据类型 顺序表 顺序表应用 一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构. 二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,...a

线性链表之顺序表

顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 特点:顺序存取,随机访问. /* Name: SeqList Copyright: 1.0 Author: Johnny Zen Date: 04/06/17 21:51 Description: 线性链表之顺序表 *//* Chinese:顺序(线性)表 English:SeqList*/#in

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

数据结构C#版笔记--顺序表(SeqList)

线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类. 顺序表(SeqList)的基本特征为:元素在内部存储时

C#线性表之顺序表

线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素: (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是一个接一个的排列.因此,可以把线性表想象为一种数据元素序列的数据结构. 线性表的接口如下所示. public interface I