1.1圖書信息管理系統(tǒng)結構定義
//定義順序表數(shù)據(jù)元的結構
typedef struct Book
{
char no[20]; //圖書ISBN
char name[50]; //圖書名字
float price; //圖書價格
}Book;
//定義順序表
typedef struct SqList
{
Book *elem;
int length;
}SqList;
說明1: typedef 是使用用戶自定義數(shù)據(jù)類型名稱,來替代系統(tǒng)的類型名稱。
①為基本數(shù)據(jù)類型定義新的類型名。
typedef long double REAL;
②為自定義數(shù)據(jù)類型(結構體)定義簡潔的類型名稱。
typedef struct tagPoint
{
double x;
double y;
double z;
} Point;
這里實際有兩部操作,“struct tagPoint{}”申明一個結構,后面可用諸如“struct tagPoint Point1”語句來申明變量。第二步是“typedef struct tagPoint Point”,后面就可以直接用“Point Point1”來申明變量。
說明2:定義順序表結構時語句為“Book *elem;”,這里只定義了數(shù)組的頭指針(即首元elem[0]地址),具體在使用時靈活申請空間,如圖書信息管理系統(tǒng)初始化可寫成:
#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語言動態(tài)分配函數(shù)
- malloc(m):m是字節(jié),malloc申請m字節(jié)長度的內存空間,并返回這段空間的首地址。在遇到結構體時需要的字節(jié)數(shù)往往難以估計,會配合使用sizeof()使用。free(p):釋放指針p所指變量的存儲空間,即徹底刪除一個變量。malloc和free是配對出現(xiàn)的,如果申請后不釋放就是內存泄露,釋放只能釋放一次,如果釋放兩次及兩次以上會出現(xiàn)錯誤(但是釋放空指針例外)。
- 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是刪除對象數(shù)組。malloc和free不區(qū)分對象,只針對內存空間操作,所以刪除數(shù)組用free(L.elem)即可。此外用delete和free刪除僅是解除指針與內存的聯(lián)系,刪除后指針還是存在的,為以后程序還能繼續(xù)使用指針及預防錯誤,需要在刪除后將指針置NULL或0。
1.3清空順序表
int Clear_SqList(SqList &L) {
L.length=0;
} //將線性表的長度置為0
(其他順序表操作詳見要點總結)