顺序表

匿名 (未验证) 提交于 2019-12-02 23:41:02

线性表的动态分配顺序存储结构伪代码

(1)宏定义(替换):用一个字符串替换成另一个字符串,只可单独使用(定义)。

例:#define a 2(在程序中出现a的地方都替换成2)

(2)★★初始分配量/分配增量/线性表长度/当前分配的存储容量都是指的Elemtype变量的数量

在增加存储空间时计算数量×一个基类型的大小

如int类型 listsize=5→能存5个整数

 

(3)typedef(为一种数据类型定义一个新名字) 包括基类型/自定义类型(struct等)

type struct Stu{}a;(为结构体类型Stu定义一个新的名字a→其中a是结构体类型名)其中Stu可以省略

如下:定义了一个结构体(线性表)并换名为SqList(包括一个数组指针 长度及存储容量)

 

(4)elem是个数组指针(将指向一个elemtype的数组 其中elem是地址变量,赋值数组基地址)

 

#denine LIST_INIT_SIZE 100

(定义线性表存储空间的初试分配量为100)

#define LISTINCREMENT 10

(定义线性表存储空间的分配增量)

typedef struct

{   

Elemtype *elem;

//存储空间基址  (数组指针,值为数组基地址)

    int length;    //(线性表的)当前长度

    int listsize;  //当前分配的存储容量,以sizeof(Elemtype)为单位 

}SqList;

//定义了一个结构体(线性表)类型SqList

 

(1)Status(函数返回值类型)结果状态码:

①ERROR/FALSE→0 ②返回OK/TRUE→(转换成)1 ③OVERFLOW→2

 

(2)malloc(分配指定大小的内存)mem-allocate

用法:指令名=(Elemtype *)malloc(长度)

Elemtype指的是指针的类型

 

(3)括号 中是的是形参,SqList &L=L

→ L是SqList类型的实参(SqList) SL的引用

引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元

 

Status InitList_Sq(SqList &L)

{

L.elem=(ElemType *)malloc

(LIST_INIT_SIZE*size(ElemType));

//L.elem地址变量 赋值 分配内存 的地址

if(!L.elem) exit(OVERFLOW);

//存储分配失败 (L.elem不存在则退出进程并返回OVERFLOW)

L.length=0;//设置空表长度

L.listsize=LIST_INIT_SIZE;/初始存储容量

return OK;

}

(1)realloc 是在原有的基础上在开辟若干空间

指针名=(类型 *)realloc(原指针名,新大小)

类型指的是指针的数据类型

Elemtype  *newbase;

newbase=(ElemType *)realloc(原数组指针名,新大小);

②按照新大小重新分配空间,

③将原有数据从头到尾拷贝到新分配的内存区域

④并返回该内存区域的首地址。即重新分配存储器块。

 

(2)在第i(1≤i≤n)个元素之前插入一个元素e

(L.length=n)

★对于数组而言,从0→n-1

★对于元素而言,从1→n(可以在第一个之前到第n+1之前插入元素1≤i≤L.length+1)

 

(3)*(p+n), p[n]都是第(i+1)个元素的值

因为p是数组首地址,即p==&p[0];

L.elem[i-1]是第i个元素相当于*(L.elem+i-1)

L.elem+L.length-1   /  &L.elem[L.length-1]

是最后一个(表尾)元素的地址

 

 

Status ListInsert_Sq(SqList &L,int i,ElemType e){

if(i<1 ll i>L.length+1) return ERROR;

//i值不合法

if(L.length≥L.listsize)

//当前存储空间已满,增加分配

ElemType *newbase;

newbase=(Elemtype *)

realoc(L.ele+(L.listsize+LISTINCREMNT)*sizeof(ElemType));

if ( ! newbase) exit( OVERFLOW) ;

//存储分配失败

L. elem = newbase;//新基址

L.listsizw+= LISTINCREMENT;

//增加存储容量

}

q=&(L.elem[i-1]);//q为插入位置

for(p=&(L.elem[L.length-1]);p≥q;--p);

*(p+1)=*p;

*q=e;//插入e

++L.length;

return OK;

}

 

 

 

 

 

转载请标明出处:顺序表
文章来源: https://blog.csdn.net/qq_41850194/article/details/91493913
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!