《数据结构(C语言版)》严蔚敏代码实现———顺序表
一、前言
最近在重新学习数据结构啦,网上说这本书挺不错哒,于是我开始啃这本书咯…有一说一,严奶奶的书挺好的,就是有点大量使用指针。。。需要沉下心来,看一看画一画才能懂,我自己手敲了一遍书上代码,加上了自己的理解,希望大家也能更清楚的看明白~
好啦废话不多说,下面就上代码!💁
二、代码
严奶奶的书中预定义了一些预定义常量和类型,大家可以 新建一个y.h文件粘贴以下内容, 然后再去复制代码哦。
y.h文件内容:
/**
* 严奶奶书中的预定义常量和类型
**/
//函数结果状态代码
#define TRUE 1 //成功
#define FALSE 0 //失败
#define OK 1 //成功
#define ERROR 0 //错误
#define INFEASIBLE -1 //不可实行
#define OVERFLOW -2 //溢出
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
顺序表SqList.cpp:
#include "y.h"
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef int ElemType;
/**
* 严奶奶顺序表的实现
* by 熊子q 2021.1.28
**/
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
//强悍如斯的严奶奶,强悍如斯的顺序表
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
//顺序表初始化
Status InitList_Sq(SqList &L){
//构造一个空的线性表L,动态分配空间
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW); //存储空间分配失败
L.length = 0; //空表长度为0
L.listsize = LIST_INIT_SIZE; //初始存储容量
return OK;
}
//销毁线性表,基本操作,书上没有,自己写的
void DestoryList_Sq(SqList &L){
free(L.elem);
//释放后的无效指针必须置为空,不然会导致内存泄漏
L.elem = NULL;
L.length=0;
L.listsize=0;
}
//清空线性表,基本操作,书上没有,自己写的
void ClearList_Sq(SqList &L){
L.length = 0;
}
//判断线性表是否为空,基本操作,书上没有,自己写的
Status ListEmpty_Sq(SqList L){
if(L.length == 0) return TRUE;
else return FALSE;
}
//获取顺序表的长度,基本操作,书上没有,自己写的
int ListLength_Sq(SqList L){
return L.length;
}