一、數(shù)據(jù)結構-線性表順序存儲

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

(其他順序表操作詳見要點總結)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容