线性表的顺序存储结构
特点:
1、物理地址相邻
2、随机存取:可以计算出每个数据元素的存储地址(数组)
在数据结构(严蔚敏C语言)中,顺序表实现的代码如下:
时间复杂度的分析:
顺序表时间主要花费在移动元素中,移动元素的个数取决于插入或删除元素的位置
结论:
顺序表中插入或删除一个数据元素,平均移动一半的元素
算法ListInsert_Sq和ListDelete_Sq的时间复杂度为O(n)
//初始化文件
#ifndef _INIT_H
#define _INIT_H
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define TRUE 1
#define FALLSE 0
#define OK 1
#define ERROR -1
#define OVERFLOW NULL
typedef int Status;
#endif
头文件
#ifndef _SEQUENCE_H
#define LISTSIZE 100
#define LISTINCEREMENT 10
typedef int Item;
typedef struct
{
Item add[LISTSIZE];
int length;
}SqList;
Status init_sqlist(SqList &L);
Status insert_list(SqList &L,int i,Item e);//插入元素e到顺序列表的第i个位置
Status delete_list(SqList &L,int i,Item &e);//删除第i个元素并返回给e;
Status display_list(SqList);
Status merge_list(SqList La,SqList Lb,SqList &Lc);//合并两个顺序列表
#endif
.cpp文件
#include "init.h"
#include "Sequence.h"
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
Status init_sqlist(SqList &L)//构造空表L
{
L.length=0;
return OK;
}
Status insert_list(SqList &L,int i,Elemtype e)//插入e元素到第i位
{
if (i<1||i>L.length+1)
{
return ERROR;//i值不合法
}
if (L.length>=L.listsize)//超出原有的存储容量,需要重新分配
{
Elemtype *newbase;
newbase=(Elemtype *)realloc(L.elem,(L.listsize+LISTINCEREMENT)*sizeof(Elemtype));
if (!newbase)
{
exit(OVERFLOW);
}
L.elem=newbase;//新基址
L.listsize +=LISTINCEREMENT;//增加的存储容量
}
Elemtype *q,*p;
q=&L.elem[i-1];//q为插入位置
for (p=&L.elem