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
(其他顺序表操作详见要点总结)