数据结构之线性表:顺序存储

SeqList.h

 1 #define ListSize 100
 2
 3 typedef int DataType;
 4 typedef struct {
 5     DataType list[ListSize];
 6     int length;
 7 }SeqList;
 8
 9 void InitList(SeqList *L)
10 /* 将线性表初始化为空的线性表只需要把线性表的长度length置为0 */
11 {
12     L->length=0;
13 }
14
15 int ListEmpty(SeqList L)
16 /* 判断线性表是否为空,为空返回1,否则返回0 */
17 {
18     return !L.length;
19 }
20
21 int ListLength(SeqList L)
22 /* 返回线性表的长度 */
23 {
24     return L.length;
25 }
26
27 void DestroyList(SeqList *L)
28 {
29     L->length=0;
30 }
31
32
33 int GetElem(SeqList L, int i, DataType *e)
34 /* 查找线性表中第i个元素。查找成功将该值返回给e,并返回1表示成功;否则返回-1表示失败。 */
35 {
36     if(i<1 || i>L.length)
37         return -1;
38
39     *e=L.list[i-1];
40     return 1;
41 }
42
43 int LocateElem(SeqList L, DataType e)
44 /* 查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。 */
45 {
46     int i;
47
48     for(i=0; i<L.length; i++)
49         if(L.list[i] == e)
50             return i+1;
51
52     return 0;
53 }
54
55 int InsertList(SeqList *L, int i, DataType e)
56 /* 在顺序表的第i个位置插入元素e,插入成功返回1,如果插入位置不合法返回-1,顺序表满返回0 */
57 {
58     int j;
59
60     if(i<1 || i>L->length) {
61         printf("插入位置i不合法!\n");
62         return -1;
63     } else if(L->length == ListSize) {
64         printf("顺序表已满,不能插入元素。\n");
65         return 0;
66     } else {
67         for(j=L->length; j>=i; j--)
68             L->list[j]=L->list[j-1];
69
70         L->list[i-1]=e;
71         L->length++;
72
73         return 1;
74     }
75 }
76
77 int DeleteList(SeqList *L, int i, DataType *e)
78 /* 将顺序表的第i个位置的元素值返回给e,并删除该元素,删除成功返回1,如果删除位置不合法返回-1,顺序表空返回0 */
79 {
80     int j;
81
82     if(L->length == 0) {
83         printf("顺序表已空不能进行删除!\n");
84         return 0;
85     } else if(i<1 || i>L->length) {
86         printf("删除位置不合适!\n");
87         return -1;
88     } else {
89         *e=L->list[i-1];
90
91         for(j=i; j<L->length; j++)
92             L->list[j-1]=L->list[j];
93
94         L->length--;
95
96         return 1;
97     }
98 }
时间: 2024-08-29 22:47:04

数据结构之线性表:顺序存储的相关文章

数据结构例程——线性表顺序存储的应用

本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求:时间复杂度为O(n).空间复杂度为O(1)的算法 解法0:用基本运算实现,不满足复杂度要求 (注:本文中所需要的list.h和list.cpp见点击参照-) #include "list.h" #include <stdio.h> void delnode1(SqList *

数据结构之线性表-顺序存储

本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 线性表简介 线性表是0个或多个元素的有限序列.即元素之间有顺序且有限.假设表中有元素A1,A2,A3,....,AN,若存在1<i<N,则 Ai 是 Ai-1的直接后继,Ai-1 是Ai的直接前驱.作为线性表,必须满足A1没有前驱,AN没有后继(有限性).N是线性表的长度.当N=0时,即表中没有任何元素也即空表. 1.2 线

浅谈数据结构之线性表顺序存储(一)

 首先,数据结构是由某一数据元素集合及该集合中所有数据元素之间的关系组成.具体来说,数据结构应当包含三方面的内容:(1).数据的逻辑结构:(2).数据的存储结构:(3).对数据所施加的操作.而数据的存储结构形式有两种:顺序存储与链式存储.在这里,先谈一谈线性表的顺序存储. 线性表:零个或多个数据元素的有限序列.第一,它是一个序列,也就是说,元素之间是有顺序的:第二,它是有限的,即元素个数是有限的.而线性表的顺序存储结构,说白了,就是在内存中找块地,通过占位的形式把一定的内存空间给占了,然后把相同

数据结构之线性表——顺序存储结构(php代码实现)

<?php /**  *  * 线性表:即零个或多个数据元素的有限序列.  * 线性表的数据结构:即数据元素依此存储在一段地址连续的存储单元内.在高级语言中就表现为数组.  *  * 1. DestroyList: 销毁顺序线性表  * 2. ClearList: 将线性表重置为空  * 3. ListEmpty: 判断线性表是否为空  * 4. ListLength: 返回线性表的长度  * 5. GetElem: 返回线性表中第$index个数据元素  * 6. LocateElem: 返回

数据结构之线性表之顺序存储结构(3)

1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数据元素的有限序列. 如果用数学语言来进行定义: (声明:由于下标不是很好弄出来,所以只能表示下面这种方式了,请见谅!) 若线性表记作(a1,...ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i

数据结构之线性表(顺序存储结构)

小学生放学都是要按顺序排队的,一个接一个,每个小学生的前后位置是固定的,这样便于迅速清点. 其实这就是一个线性表,从这件事里我们就可以找到很多关于线性表的特性,如 1.线性表是一个序列,它是有顺序的(排队) 2.第一个元素无前驱,最后一个无后继,其他每个元素都有一个前驱和后继(一个接一个) 3.元素是有限的(小学生的个数是有限的) 4.数据类型都相同(都是小学生在排队) 说明白线性表示什么,下面我们直接看线性表的实现 线性表的实现分顺序存储结构和链式存储结构 顺序存储结构: #define LI

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

数据结构-线性表顺序存储(c++) 2018-09-06 List.h  //头文件 1 #define OK 1 2 #define ERRO0R 0 3 #define TRUE 1 4 #define FALSE 0 5 #define MAXSIZE 20 //存储空间初始分配量 6 7 typedef int Status; //Status 函数结果状态码 8 typedef int ElemType; //ElemType 据具体情况而定 9 10 class SqList 11

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.