当前位置:网站首页>(一)、线性表的顺序存储结构链式存储结构
(一)、线性表的顺序存储结构链式存储结构
2022-08-04 16:58:00 【小僧寒水寺无心】
一、前言
本书结合程杰的《大话数据结构》一书进行学习。之前学的数据结构知识很多都忘了,最近重新复习一下。不会涉及很的理论知识,主要是代码实现为主。
二、线性表
线性表:0个或多个数据元素的有限序列。
线性表的抽象数据类型:顺序存储结构、链式存储结构
线性表的顺序存储结构体,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
三、线性表的顺序存储结构
线性表的顺序存储代码:
#define MAXSIZE 20
typedef char ElemType;
typedef struct{
ElemType data[MAXSIZE];
int length;
}SqList;
#define OK 1
#define ERROR 0
typedef int Status;
//获取元素
Status GetElem(SqList L, int i, ElemType *e)
{
if(L.length <= 0)
return ERROR;
if((i <= 0) || (i > L.length))
return ERROR;
*e = L.data[i-1];
return OK;
}
//插入
Status ListInsert(SqList *L, int i; ElemType e)
{
int k;
if(!L || (i <= 0) || (i>L->length +1))
return ERROR;
if(L->length == MAXSIZE)
return ERROR;
for(k = L->length - 1; k >= i-1; k--)
{
L->data[k+1] = L->data[k];
}
L->data[i-1] = e;
L->length++;
return OK;
}
//删除
Status ListDelete(SqList *L, int i, ElemType *e)
{
int k;
if(!L || (i<1) || (i>L->length))
{
return ERROR;
}
*e = L->data[i-1];
for(k = i-1; k < L->length - 1; k++)
{
L->data[k] = L->data[k+1];
}
L->length--;
return OK;
}
四、线性表的链式存储结构
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
#include <stdio.h>
#include "linklist.h"
//获取第i个节点的数据域值
Status GetElem(LinkList L, int i, ElemType *e)
{
int j;
LinkList p;
p = L->next;
if(i<1)
return ERROR;
j = 1;
while(p && j <i)
{
p = p->next;
j++;
}
if(!p)
return ERROR;
*e = p->data;
return OK;
}
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j = 1;
LinkList p, s;
p = *L;
if(!L || i < 0)
return ERROR;
while(p || j < i)
{
p = p->next;
j++;
}
if(!p)
return ERROR;
s = (LinkList)malloc(sizeof(Node))
s->data = e;
s->next = p->next;
p-next = s;
return OK;
}
Status ListDelete(LinkList *L, int i, ElemType *e)
{
int j = 1;
LinkList p, q;
p = *L;
if(!L || i < 1)
return ERROR;
while(p->next || j < i)
{
p = p->next;
j++;
}
if(!p->next)
return ERROR;
q = p->next;
p->nex = q->next;
*e = q->data;
free(q);
return OK;
}
边栏推荐
- ES中同时使用should和must导致只有must生效解决方案
- WPF 光标初始化的时候 temp 文件夹满了无法创建
- JSP 标准标签库(JSTL)[通俗易懂]
- JSP的Web监听器(Listener)
- 博云入选Gartner中国云原生领域代表性厂商
- Analysis of the gourd baby
- 湖北移动中兴B860AV2.1_S905L_线刷固件包
- 吃透Chisel语言.32.Chisel进阶之硬件生成器(一)——Chisel中的参数化
- WPF 修改 ItemContainerStyle 鼠标移动到未选中项效果和选中项背景
- SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
猜你喜欢
随机推荐
吃透Chisel语言.32.Chisel进阶之硬件生成器(一)——Chisel中的参数化
Unity Apple登录接入
乐享购(分享购)的模式:优势、亮点、收益
全世界国家和地区国家顶级域名对照表
华硕win11安全启动如何开启
LeetCode 0168. Excel表列名称
码蹄集 - MT2142 - 万民堂大厨
北京海淀6家必胜客被暂停外卖订餐 存在食品安全问题
生产环境重大bug,update加上索引字段会走索引进行更新?还是走全表扫描
dotnet core 隐藏控制台
WEB 渗透之XXE&XML
通关剑指 Offer——剑指 Offer II 010. 和为 k 的子数组
JSP 标准标签库(JSTL)[通俗易懂]
机器学习(十一):KNN(K近邻)
罗振宇折戟创业板/ B站回应HR称用户是Loser/ 腾讯罗技年内合推云游戏掌机...今日更多新鲜事在此...
抖音最重要的接口——item_search_video-根据关键词获取视频列表
广东移动魔百盒M411A _905L3_线刷固件包
容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
mysql学习笔记——利用动态SQL和Session变量实现一个公式或者计算器
LeetCode 0167. 两数之和 II - 输入有序数组








