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

一、线性表的顺序存储需要三个属性

1.存储空间的起始位置

2.线性表的最大存储容量

3.线性表的当前长度

二、线性表的时间复杂度:

线性表的顺序存储结构,在存、读数据时,不管是哪个位置,时间复杂度都是O(1); 插入删除的时间复杂度是O(n),所以线性表适合元素个数不太变化,而更多是存取数据的应用。

三、线性表的结构示意图:

四、代码示例:

/*我们的计量方式,除下标从0开始外,其余都从1开始算,所以只有在涉及访问数组的时候,要注意是否要+1 或-1*/
#include <stdio.h>

#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FLASE 0

typedef struct
{
 int No;
 int grade;
} ElemType;

typedef struct
{
 ElemType data[MAXSIZE];//the max length of the list
 int length;
}SqList;

void InitList(SqList* L)
{
 L->length = 0;
}

int GetElem(SqList* L,int i,ElemType* e)
{
 if(L->length == 0 || i > L->length || i < 1)
  return ERROR;
 *e = L->data[i-1];
 return OK;

}
int CreatList(SqList* L)
{
 int i;
 printf("ready to create the list,please input the length\n");
 scanf("%d",&L->length);
 if(L->length > MAXSIZE)
  fprintf(stderr,"out of memory!\n");
 for(i = 0; i <= L->length - 1;i++)
 {
  printf("data %d=   ",i+1);
  scanf("%d %d",&L->data[i].No,&L->data[i].grade);
 }
}

int InsertList(SqList*L,int i,ElemType* e)
{
 int k;
 if(L->length == MAXSIZE)
  return ERROR;
 if(i < 1 || i > L->length + 1)
  return ERROR;
 if(i <= L->length)
 {
  for(k = L->length; k >= i; k--)
  {
   L->data[k] = L->data[k - 1];
  }
 }
 L->data[i - 1] = *e;
 L->length++;

 return OK;
}

int DeleteList(SqList* L,int i)
{
 int k;
 if(L == NULL || i > L->length)
  return ERROR;
 for(k = i; k <= L->length;k++ )
 {
  L->data[k - 1] = L->data[k];
 }
 L->length --;

 return OK;
}

void ShowList(SqList* L)
{
 int i;
 for(i = 0; i <= L->length - 1;i++)
 {
  printf("%d %d \n",L->data[i].No,L->data[i].grade);
 }
}

int ListLength(SqList* L)
{
 return L->length;
}

/*return the location(num) of the element*/
int LocateElem(SqList* L,ElemType* e)
{
 int i,res;
 for(i = 0; i < L->length; i++)
 {
  if(L->data[i].No == e->No && L->data[i].grade == e->grade)
   res = i+1;
  else
   res = -1;
 }
 return res;

}

/*combine two lists,if the element in l2 is not existent in l1,insert the element into l1*/
void CombineList(SqList* L1,SqList* L2)
{
 int L1_len,L2_len,i;
 ElemType e;
 L1_len = ListLength(L1);
 L2_len = ListLength(L2); 

 for(i = 1; i <= L2_len;i++)
 {
  GetElem(L2,i,&e);
  if(LocateElem(L1,&e) == -1)
  {
   InsertList(L1,i,&e);
  }
 }
}

int main()
{
 SqList L1;
 SqList L2;
 InitList(&L1);
 InitList(&L2);

 printf("SqList L1:\n");
 CreatList(&L1);
 printf("SqList L2:\n");
 CreatList(&L2);
 CombineList(&L1,&L2);
 ShowList(&L1);
 return 0;
}

结果示意:

时间: 2024-08-26 07:24:02

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

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

工程目录结构: Common.cs: 1 namespace DataStructure.Common 2 { 3 public class CommonClass 4 { 5 public const int DS_ListMaxSize = 20; //线性表的最大容量 6 } 7 } DS_List.cs: 1 using System; 2 using DataStructure.Common; 3 using ElemType = System.Int32; // ElemType 用

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

概念: 线性表顺序存储结构中的元素拥有一个直接前驱元素,和一个直接后继元素:线性表的第一个元素只有直接后继元素,最后一个元素只有直接前驱元素 线性表一旦创建,长度一般都是固定的,这是它的最大容量 线性表中元素个数只能小于等于线性表长度 线性表的基本操作: 1 public class SeqList { 2 3 final int defaultSize=10; 4 int maxSize;// 顺序表的最大长度 5 int size;// 线性表的当前长度 6 static Object[]

数据结构之线性表之顺序存储结构(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

《大话数据结构》笔记(2)--线性表的顺序存储结构

线性存储结构的Java实现代码: https://github.com/Lyu0709/data-structure/tree/master/src/com/coding/basic/array 第三章 线性表 定义 数学语言 若将线性表记为(a1, ..., ai-1, ai, ai+1, ..., an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i=1,2,..,n-1时,ai有且仅有一个直接后继,当n=2,3,...,n

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

简要比较线性表的顺序存储结构和链式存储结构

我们分别从存储分配方式.时间性能.空间性能三方面来做对比. 存储分配方式 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素. 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 时间性能 <1>查找 顺序存储结构O(1) 单链表O(n) <2>插入和删除 顺序存储结构需要平均移动表长一半的元素,时间为O(n) 单链表在计算出某位置的指针后,插入和删除时间仅为O(1) 空间性能 顺序存储结构需要预分配存储空间,分大了,容易造成空间浪费,分小了,容易发生溢出. 单链

第6课 - 线性表的顺序存储结构及实现

1. 线性表的顺序存储结构 [顺序存储结构定义] 线性表的顺序存储结构,指的是用一段地址连续的存储单元依此存储线性表中的数据元素. [设计思路] 可以用一维数组来实现顺序存储结构的线性表. 1 template <typename T> 2 class SeqList : public List<T> 3 { 4 protected: 5 T *m_array; //顺序存储空间 6 int m_length; //当前线性表长度 7 }; [顺序存储线性表类的组成] DTLib顺

线性表的顺序存储结构

1.顺序表: 线性表占用的存储空间=n*sizeof(ElemType) n为线性表的长度,ElemType为线性表的元素类型,sizeof(ElemType)为每个元素所占存储空间大小(即字节数) 线性表的顺序存储结构利用数组实现,数组的基本类型是线性表中元素类型,数组大小大于等于线性表的长度. 基本运算实现: (1)建立顺序表 void CreateList(SqList *&L,ElemType a[],int n)    //由a中的n个元素建立顺序表 {  int i;    L=(S