筆記 結構體型別和鍊錶的建立 遍歷 插入 刪除

2021-10-21 16:32:37 字數 3931 閱讀 3515

1:結構體陣列

定義結構體陣列,表示乙個班級有5個學生。

struct stuclass[5]

;

假如要定義乙個班級40個同學的姓名、性別、年齡和住址, 可以定義成乙個結構陣列。如下所示:

struct

student[40]

;

也可定義為:

struct string

;struct string student[40]

;

需要指出的是結構陣列成員的訪問是以陣列元素為結構變數的, 其形式為:

結構陣列元素.成員名

例如:

student[0]

.name

student[30]

.age

實際上結構陣列相當於乙個二維構造, 第一維是結構陣列元素, 每個元素是乙個結構變數, 第二維是結構成員。

2:結構體和函式呼叫

struct books

;int

main()

2:結構體動態開闢與釋放

使用了malloc()函式的都可以稱為動態分配記憶體。malloc()帶乙個整型引數,如:

int *parr=(int *)malloc(sizeof(int)*5);

動態記憶體的釋放:free(parr);

struct student

;struct student*

createstudent

(void);

//void表示該方法不加形參,可不寫

void

showstudent

(struct student *);

intmain()

struct student*

createstudent

(void

)void

showstudent

(struct student *pst)

3:結構體鍊錶的建立、輸出、刪除、插入、修改

#include

using namespace std;

enum operation

;//列舉型別,用於選單選擇結果

struct node //結點結構

;

operation menu()

;//選單函式

node *

createlist()

;//建立鍊錶函式宣告

void

printlist

( node *);

//輸出鍊錶中結點資訊函式宣告

node *

insertnode

(node *

,node *);

//在鍊錶中插入結點函式宣告

node *

deletenode

(node *

,int);

//在鍊錶中刪除結點函式宣告

node *

deletelist

(node *head)

;//刪除整個鍊錶

void

create()

;//對應操作選單--建立鍊錶的操作

void

print()

;//對應操作選單--遍歷鍊錶的操作

void

insert()

;//對應操作選單--插入鍊錶結點的操作

void

delete()

;//對應操作選單--刪除鍊錶結點的操作

void

deleteall()

;//對應操作選單--刪除整個鍊錶的操作

int n=0;

//全域性整型變數存放鍊錶中結點個數

node * head=

null

;//全域性指標變數存放煉表頭結點位址-頭指標

/*建立鍊錶*/

node *

createlist()

//建立鍊錶函式

else

//建立非空鍊錶

p -> next =

null

;//設定鍊錶尾部為空

delete s ;

//釋放資料為0的結點

cout<"鍊錶建立完成..."

; cout<<

"建立的鍊錶中共有"

<"個節點"

<}return

( head )

;//返回頭指標

}/*遍歷鍊錶*/

void

printlist

( node * head)

//輸出鍊錶中結點資訊函式,鍊錶遍歷

while

(p!=

null);

else

cout<<

"鍊錶中共有"

<"個節點"

<}/*插入結點*/

node *

insertnode

(node *head,node * s)

//插入結點的函式,head為煉表頭指標,s指向要插入的新結點

else

//原來的鍊錶不是空表

if(s->data<=p->data)

//要插入的結點資料比最後乙個結點資料小

else

//插到q指向的結點之後,p指向的結點之前

}else

//要插入的結點資料比最後乙個結點資料還大

} n=n+1;

//結點數加1

cout<<

"成功完成乙個新結點插入..."

(head);}

/*刪除結點*/

node *

deletenode

(node *head,

int deldata)

//刪除資料為deldate的結點的函式

//先找到要刪除的結點

while

(deldata!=p->data && p->next!=

null

)//p指向的不是所要找的結點且後面還有結點

//p後移乙個結點

if(deldata==p->data)

//找到了要刪除的結點

else

cout<<

"要刪除的資料為"

<"的結點在鍊錶中沒有找到"

return

(head);}

/*刪除整個鍊錶*/

node *

deletelist

(node *head)

//刪除整個鍊錶

delete p;

n--; head=

null;}

cout<<

"整個鍊錶刪除成功!"

}/*選單函式*/

operation menu()

/*對應操作選單--建立鍊錶的操作*/

void

create()

else

}/*對應操作選單--遍歷鍊錶的操作*/

void

print()

/*對應操作選單--插入鍊錶結點的操作*/

void

insert()

cout<"結點插入操作結束"

<}/*對應操作選單--刪除鍊錶結點的操作*/

void

delete()

cout<"結點刪除操作結束"

<}/*對應操作選單--刪除整個鍊錶的操作*/

void

deleteall()

結構體和鍊錶

1 簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列...

建立簡單的鍊錶 節點是結構體

輸出結果如下 i值 0 10jil i值 1 為什麼會出現亂碼呢?由於strcat 函式的意義是把字串2新增到字串1,而字串1不夠長 11jiangtao i值 2 12jiangtao i值 3 13jiangtao i值 4 14jiangtao press any key to continu...

鍊錶的建立與遍歷

鍊錶,簡而言之,就是基於鏈式儲存結構下的線性表。鍊錶包括單向鍊錶 雙向鍊錶以及迴圈鍊錶。鍊錶是一種很常用的資料結構,其定義如下 單向鍊錶的定義 定義說明 包括資料域和指標域 typedef int elemtype typedef struct node lnode,linklist 鍊錶的基本操作...