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 鍊錶的基本操作...