結構體
用一組變數定義一個事物
struct student //student 是一種資料型別 { int id; char name[20];
char sex;
int age;
}mike,bob;
變數定義除了跟在結構體定義后面,還可以:student std1,std2;跟int a,b;類似
結構體的初始化及在記憶體的存盤方式:

注:結構體在記憶體的存盤方式和陣列類似,都是利用了一片連續的記憶體
使用點訪問結構體變數的成員值;
結構體變數賦值,是copy結構體的值
結構體做函式回傳值,是copy一份回傳值給呼叫者
結構體與指標

注:(*one).id_num 還可以寫成 one->id_num , -> 是指向運算子
當指標指向結構體變數時,就可以使用指向運算子訪問結構體的成員變數;
結構體陣列:

對結構體陣列名進行++操作,跨過的是整個結構體;
即結構體陣列名指向的是陣列的第一個結構體的地址;
鏈表

注:鏈表頭head,是一個指標
鏈表節點包括2部分,第一部分是當前節點資料
第二部分是下一個節點的地址,
如果是雙向鏈表,還包括上一個節點的地址,
NULL 代表空指標
new 運算子:開辟存盤空間,回傳新存盤空間的地址
int *pint = new int(1024)// int代表這片存盤空間的資料型別,括號內是初始值(可以不寫)
int *pia = new int[4] // 開辟用來存盤4個整形元素的陣列
delete pint #釋放指標指向的存盤空間,
delete [] pia # []表示要釋放的地址是指向陣列的區域
動態創建鏈表:
首先創建一個結構體:

注:student *next; 是創建指向student型別的指標
第一次:head=new student;
student *temp=head; //temp 用來指向最新節點
如果需要創建下一個節點:
temp->next=new student;
temp=temp->next; //即將temp往前移動一個結構體
如果不再需要創建新節點:
temp->next=NULL;
struct student { int id; student* next; }; student *create() { student *head, *temp; int num, n = 0; head = new student; temp = head;//temp是最新節點 cin >> num; //輸入學生學號 while (num!=-1) //學號為-1代表不再有學生 { n++; //統計是鏈表的第幾個節點 temp->id = num; temp->next = new student; temp = temp->next; cin >> num; } if (n == 0)head = NULL; else temp->next = NULL; return head; }
鏈表的遍歷:

鏈表節點洗掉:
如果是洗掉鏈表的第一個節點,直接讓head指向鏈表的第二個節點
即:temp=head;head=head->next; delete temp;
如果是洗掉中間節點,即讓它的前一個節點指向后一個節點;

比如:要洗掉的是temp節點,follow->next=temp->next; delete temp;

注:while回圈執行完,follow節點是要洗掉節點的前一個節點,temp節點是要洗掉的節點;
節點插入:
比如要插入unit 節點;
如果要在所有元素的前面插入節點:unit->next=head;head=unit;
如果在鏈表中間插入節點:

unit->next=temp;follow->next=unit;

雙向鏈表:

洗掉節點:
如果洗掉的是中間節點:

插入新節點,如果插入位置是中間:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56827.html
標籤:C++
