数据结构_线性表

本文详细介绍了线性表的两种存储结构——顺序存储和链式存储。顺序存储通过连续地址存储线性表元素,实现随机存取,常使用数组表示;链式存储利用结点表示数据元素并存储后续位置信息,适用于动态变化的线性表,文中以单链表为例进行实现。此外,文章还提到了循环链表和双向链表的适用优势。
摘要由CSDN通过智能技术生成

线性表属于线性结构,是属于同一数据对象的元素组成的有限序列。它在逻辑结构上属于线性结构,在存储结构上可以分别用顺序存储结构和链式存储结构来表示。

顺序存储

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值