线性表属于线性结构,是属于同一数据对象的元素组成的有限序列。它在逻辑结构上属于线性结构,在存储结构上可以分别用顺序存储结构和链式存储结构来表示。
顺序存储
1.线性表的顺序存储结构的表示(又称顺序表)
用顺序地址存储的方式映射线性表的逻辑结构,即用一组地址连续的存储单元依次存储线性表的数据元素。
每一个数据元素存储位置和线性表的起始位置对应一个唯一常数和存储单元来确定,即为随机存取的存储结构,常用变长数组来表示。
代码实现
设计顺序表ADT的接口头文件
///Squence.h
#pragma once
#include<stdbool.h>
#include<stdio.h>
#define MAX 100 //顺序表最大值
//顺序表数据元素(更改数据元素,修改基本元素结构体和接口的实现即可)
struct item{
//数据项
char no[20];
char name[40];
float price;
bool operator==(const item& a) {
return (no == a.no) && (name == a.name) && (price == a.price);
}
};
typedef item Item;
typedef struct {
Item* link;
int length;
}SquenceList;
typedef SquenceList* List;
//顺序表初始化
bool Listinit(List L);
//顺序表取值
bool GetItem(const List L, int i, Item &e);
//顺序表查找
int LocateItem(const List L, Item e);
//顺序表插入
bool ListInsert(List L, int i, Item e);
//顺序表展示
bool Listshow(List L);
接口的实现
#include<stdio.h>
#include<stdlib.h>
#include"Squence.h"
//顺序表初始化
bool Listinit(List L) {
L->link = new Item[MAX]; //初始化存储空间大小固定,容易浪费大量存储空间
if (!L->link) {
fputs("overflow", stderr);
return false;
}
L->length = 0;
return true;
}
//顺序表取值
bool GetItem(const List L, int i,Item &e) {
if (i<1 || i>L->length) {
fputs("overflow", stderr);
return false;
}
else {
e = L->link[i-1]; //时间复杂度为O(1)
return true