一、数据结构-线性表顺序存储

1.1图书信息管理系统结构定义

//定义顺序表数据元的结构 
typedef struct Book     
{ 
   char no[20];         //图书ISBN
   char name[50];       //图书名字
   float price;             //图书价格
}Book; 
//定义顺序表
typedef struct SqList
{ 
   Book *elem;   
   int length; 
}SqList;

说明1: typedef 是使用用户自定义数据类型名称,来替代系统的类型名称。
①为基本数据类型定义新的类型名。

typedef long double REAL;

②为自定义数据类型(结构体)定义简洁的类型名称。

typedef struct tagPoint
{
    double x;
    double y;
    double z;
} Point;

这里实际有两部操作,“struct tagPoint{}”申明一个结构,后面可用诸如“struct tagPoint Point1”语句来申明变量。第二步是“typedef struct tagPoint Point”,后面就可以直接用“Point Point1”来申明变量。
说明2:定义顺序表结构时语句为“Book *elem;”,这里只定义了数组的头指针(即首元elem[0]地址),具体在使用时灵活申请空间,如图书信息管理系统初始化可写成:

#define MAXSIZE 100
int Initial_SqList(SqList &List1){
    List1.elem=new Book[MAXSIZE];
    if (!List1.elem){return -1;}
    List1.length=0;
    return 0;
}

1.2销毁顺序表

int Destroy_SqList(SqList &L){
    if(!L.elem){return -1;}
    delete []L.elem;
    return 0;
}

说明1:C语言动态分配函数

  • malloc(m):m是字节,malloc申请m字节长度的内存空间,并返回这段空间的首地址。在遇到结构体时需要的字节数往往难以估计,会配合使用sizeof()使用。free(p):释放指针p所指变量的存储空间,即彻底删除一个变量。malloc和free是配对出现的,如果申请后不释放就是内存泄露,释放只能释放一次,如果释放两次及两次以上会出现错误(但是释放空指针例外)。
  • new用于申请存放变量的内存空间,如int *p1= new int; int *p1 = new int[10];delete P用于释放指针P所指向的内存。P必须是new操作的返回值。上例L.elem可以看成指针。

说明2:delete L.elem是删除L.elem[0]一个对象,delete []L.elem是删除对象数组。malloc和free不区分对象,只针对内存空间操作,所以删除数组用free(L.elem)即可。此外用delete和free删除仅是解除指针与内存的联系,删除后指针还是存在的,为以后程序还能继续使用指针及预防错误,需要在删除后将指针置NULL或0。

1.3清空顺序表

int Clear_SqList(SqList &L) { 
L.length=0; 
 }   //将线性表的长度置为0

(其他顺序表操作详见要点总结)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容