数据结构笔记(严蔚敏版)第二章线性表
2-1.线性表
2-1-1.线性表的存储结构
首先要定义线性表的动态分配顺序存储结构,我们这里此结构存放在SqListType.h中
#pragma once
#ifndef _SQLISTTYPE_H_
#define _SQLISTTYPE_H_
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2
typedef int ElemType;
struct SqList{
ElemType *elem;
int length;
int listsize;
};
#endif
#define LIST_INIT_SIEZE 10 可以想象成,一个10个单位的数组== int L[10]括号中10的概念
#define LIST_INCREMENT 2 可以想象成当数组不够用的时候,再向数组里面添加2个单位的长度的数组片段,也就是给数组再接上一节,确保数组够用
ElemType *elem; 1.是存储空间基地址也就是数组的中 int *p=&a[0]的含义,
2.在线性表中: *elem就是第一个元素的地址=表的地址 叫做线性表的头指针
int length 1.等到在数组存入元素个数后的长度,例如,相当于在 int list[10]中存入5个元素,那么length就是5
int listsize;1.当前分配的存储容量(以sizeof(ElemType)为单位),
2.总长度为LIST_INIT_SIZE*sizeof(ElemType)也就是10*sizeof(ElemType);
2-1-2.线性表的基本操作
下面是基本操作的声明存放在SqListBasicOperation.h
#pragma once
#ifndef _SQLISTBASICOPERATION_H__
#define _SQLISTBASICOPERATION_H__
#include "c1.h"
#include "SqListType.h"
void InitList(SqList &L);
void DestroyList(SqList &L);
void ClearList(SqList &L);
Status ListEmpty(SqList L);
int ListLength(SqList L);
Status GetElem(SqList L,int pos,ElemType &e);
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType));
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);
Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);
Status ListInsert(SqList &L,int pos,ElemType e);
Status ListDelete(SqList &L,int pos,ElemType &e);
void ListTraverse(SqList L,void(*vi)(ElemType&));
#endif
void InitList(SqList &L); 初始化线性表,需要改变SqList表因此有&
void DestroyList(SqList &L);彻底删除线性表,需要改变SqList表因此有&
void ClearList(SqList &L);清空线性表,需要改变SqList表因此有&
Status ListEmpty(SqList L);判断线性表,Status类型说明此函数返回此操作时候成功或失败的状态;不需要改变SqList表因此没有&
int ListLength(SqList L);返回线性表中元素个数的长度,不需要改变SqList表因此没有&
Status GetElem(SqList L,int pos, ElmeType &e);Status类型说明此函数返回此操作时候成功或失败的状态;&e是pos位置上返回的元素,加入pos是5,也就是返回表中第5个元素e,因此需要&来操作线表中的元素
int LocateElem(SqList L,ElemType cur_e, Status(*compare)(ElemType,ElemType));此函数返回要找元素即cur_e元素的位置,Status(*compare)(ElemType,ElemType)是将cur_e与线性表中元素相比较的指针
Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e);输入cur_e元素,返回cur_e元素的之前一个元素pre_e
Status NextElem(SqList L, ElemType cur_e, ElemType &next_e);输入cur_e元素,返回cur_e元素的之后一个元素next_e
Status ListInsert(SqList &L,int pos,ElemType e);需要改变线性表因此需要&L,pos是指删除现象表中的第几个元素的位置,pos为5,即为第5个员孙,e是指要插入元素是几,int pos=5, ElemType e=12就是表示在线表第5个位置上插入12.
Status ListDelete(SqList &L,int pos, ElemType &e);此函数是在线性表中返回pos位置上的e元素,因此需要&e
void ListTraverse(SqList L, void(*vi)(ElemType&));遍历线性表;*vi指针是以某种格式遍历此表,在后面笔记中会提到*vi指针有几