C++複習之資料結構
前言
C/C++ 陣列允許定義可儲存相同型別資料項的變數,但是結構是 C++ 中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。
結構用於表示一條記錄,假設想要跟蹤圖書館中書本的動態,可能需要跟蹤每本書的下列屬性:
Title :標題
Author :作者
Subject :類目
Book ID :書的 ID
定義結構
為了定義結構,必須使用 struct 語句。struct 語句定義了一個包含多個成員的新的資料型別,struct 語句的格式如下:
struct type_name {member_type1 member_name1;member_type2 member_name2;member_type3 member_name3;
...
...
} object_names;
type_name 是結構體型別的名稱,member_type1 member_name1 是標準的變數定義,比如 int i; 或者 float f; 或者其他有效的變數定義。在結構定義的末尾,最後一個分號之前,您可以指定一個或多個結構變數,這是可選的。下面是宣告一個結構體型別 Books,變數為 book:
struct Books{
char title[50]; char author[50]; char subject[100];
int book_id;
} book;
訪問結構成員
為了訪問結構的成員,使用成員訪問運算子(.)
下面的例項演示了結構的用法:
#include <iostream>
#include <cstring>
using namespace std;
// 宣告一個結構體型別
Books struct Books{
char title[50]; char author[50]; char subject[100];
int book_id;
};
int main( ){
Books Book1; // 定義結構體型別 Books 的變數 Book1
Books Book2; // 定義結構體型別 Books 的變數 Book2
// Book1 詳述
strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob");
strcpy( Book1.subject, "程式語言"); Book1.book_id = 12345;
// Book2 詳述
strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob"); strcpy( Book2.subject, "前端技術"); Book2.book_id = 12346;
// 輸出 Book1 資訊
cout << "第一本書標題 : " << Book1.title <<endl;
cout << "第一本書作者 : " << Book1.author <<endl;
cout << "第一本書類目 : " << Book1.subject <<endl;
cout << "第一本書 ID : " << Book1.book_id <<endl;
// 輸出 Book2 資訊
cout << "第二本書標題 : " << Book2.title <<endl;
cout << "第二本書作者 : " << Book2.author <<endl;
cout << "第二本書類目 : " << Book2.subject <<endl;
cout << "第二本書 ID : " << Book2.book_id <<endl;
return 0;
}
上述例子中定義了結構體類似 Books 及其兩個變數 Book1 和 Book2。當上面的程式碼被編譯和執行時,它會產生下列結果:
第一本書標題 : C++ 教程
第一本書作者 : Runoob
第一本書類目 : 程式語言
第一本書 ID : 12345
第二本書標題 : CSS 教程
第二本書作者 : Runoob
第二本書類目 : 前端技術
第二本書 ID : 12346
結構作為函式引數
可以把結構作為函式引數,傳參方式與其他型別的變數或指標類似。將使用上面例項中的方式來訪問結構變數:
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books book );
// 宣告一個結構體型別
Books struct Books{
char title[50]; char author[50]; char subject[100]; int book_id;
};
int main( ){
Books Book1; // 定義結構體型別 Books 的變數 Book1
Books Book2; // 定義結構體型別 Books 的變數 Book2
// Book1 詳述
strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob");
strcpy( Book1.subject, "程式語言"); Book1.book_id = 12345;
// Book2 詳述
strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob");
strcpy( Book2.subject, "前端技術"); Book2.book_id = 12346;
// 輸出 Book1 資訊
printBook( Book1 );
// 輸出 Book2 資訊
printBook( Book2 );
return 0;
}
void printBook( struct Books book ){
cout << "書標題 : " << book.title <<endl;
cout << "書作者 : " << book.author <<endl;
cout << "書類目 : " << book.subject <<endl;
cout << "書 ID : " << book.book_id <<endl;
}
當上面的程式碼被編譯和執行時,它會產生下列結果:
書標題 : C++ 教程
書作者 : Runoob
書類目 : 程式語言
書 ID : 12345
書標題 : CSS 教程
書作者 : Runoob
書類目 : 前端技術
書 ID : 12346
指向結構指標
定義指向結構的指標,方式與定義指向其他型別變數的指標相似,如下所示:
struct Books *struct_pointer;
現在可以在上述定義的指標變數中儲存結構變數的地址。為了查詢結構變數的地址,把 & 運算子放在結構名稱的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結構的指標訪問結構的成員,必須使用 -> 運算子,如下所示:
struct_pointer->title;
使用結構指標來重寫上面的例項:
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books *book );
struct Books{
char title[50]; char author[50]; char subject[100]; int book_id;};
int main( ){
Books Book1; // 定義結構體型別 Books 的變數 Book1
Books Book2; // 定義結構體型別 Books 的變數 Book2
// Book1 詳述
strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob");
strcpy( Book1.subject, "程式語言"); Book1.book_id = 12345;
// Book2 詳述
strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob");
strcpy( Book2.subject, "前端技術"); Book2.book_id = 12346;
// 通過傳 Book1 的地址來輸出 Book1 資訊
printBook( &Book1 );
// 通過傳 Book2 的地址來輸出 Book2 資訊
printBook( &Book2 );
return 0;
}
// 該函式以結構指標作為引數
void printBook( struct Books *book ){
cout << "書標題 : " << book->title <<endl;
cout << "書作者 : " << book->author <<endl;
cout << "書類目 : " << book->subject <<endl;
cout << "書 ID : " << book->book_id <<endl;
}
當上面的程式碼被編譯和執行時,它會產生下列結果:
書標題 : C++ 教程
書作者 : Runoob
書類目 : 程式語言
書 ID : 12345
書標題 : CSS 教程
書作者 : Runoob
書類目 : 前端技術
書 ID : 12346
typedef關鍵字
下面是一種更簡單的定義結構的方式,可以為建立的型別取一個”別名”。例如:
typedef struct{
char title[50];
char author[50];
char subject[100];
int book_id;}Books;
現在可以直接使用 Books 來定義 Books 型別的變數,而不需要使用 struct 關鍵字。下面是例項:
Books Book1, Book2;
可以使用 typedef 關鍵字來定義非結構型別,如下所示:
typedef long int *pint32;
pint32 x, y, z;
x, y 和 z 都是指向長整型 long int 的指標。
相關推薦
C++複習之資料結構
前言 C/C++ 陣列允許定義可儲存相同型別資料項的變數,但是結構是 C++ 中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。 結構用於表示一條記錄,假設想要跟蹤圖書館中書本的動態,可能需要跟蹤每本書的下列屬性: Title
面試複習之資料結構
第一章 緒論 1.1 框架 資料結構: 基本概念(資料、元素、物件和ADT) 邏輯結構(集合、線性、樹形和圖形) 儲存結構(順序、鏈式、索引和雜湊) 演算法: 基本概念:演算法、特性和評價 演算法分析:時間和空間複雜度 1.2 大綱知識
C語言之資料結構
C語言中的基本結構體以及記憶體之間的關係,我們經常用到,所以我們今天來學習一下這些內容 記憶體 記憶體是什麼,和資料結構有什麼關係? 記憶體從哪裡來? 記憶體是程式執行的活動之地,程式需要放在記憶體中執行的,程式執行時需要記憶體來儲存一些臨時變數
在Object-C中學習資料結構與演算法之排序演算法
筆者在學習資料結構與演算法時,嘗試著將排序演算法以動畫的形式呈現出來更加方便理解記憶,本文配合Demo 在Object-C中學習資料結構與演算法之排序演算法閱讀更佳。 目錄 選擇排序 氣泡排序 插入排序 快速排序 雙路快速排序 三路快速排序 堆排序 總結與收穫
C++面試題之資料結構和演算法
C++面試題之資料結構和演算法 目錄 1、String原理及實現 2、連結串列的實現 2.1、順序連結串列 2.2、鏈式表 2.3、雙鏈表 2.4、迴圈連結串列 3、佇列 3.1、順序佇列 3.2、鏈式佇列 4、棧 4.1、順序棧
C語言基本資料結構之二(二叉樹的三種遍歷,節點數以及深度演算法)
關於二叉樹的定義,網上有比較好的介紹,在這裡就簡單介紹二叉樹的一些性質 二叉樹的基本性質 1)二叉樹的第i層上至多有 2^(i-1)(i ≥1)個結點; 2)深度為 h 的二叉樹中至多含有 2^h – 1 個結點; 3)若在任意一棵二叉樹中,有 n0 個葉子結點,有 n2
C++之資料結構
1 map 標頭檔案 ‘#include >map>’ 定義 map >int, int> my_Map; //注意這裡的int和int可以是其他型別,第一個int是鍵的型別,第二個是值得型別 插入資料 my_Map.i
c語言版資料結構之線性表歸併大概
線性表:n個具有相同特性的資料元素的有限序列。較為靈活,可根據需要増長或縮短。 兩線性表歸併演算法:(此時已知其元素按值非遞減排列) void MergeList(List La, List Lb,
c++程式設計師對於java的誤區之資料結構
public class MString { public String string; } import java.awt.List; import java.util.LinkedList; public class Main { public stat
C++ 自己實現資料結構之 string類
需要自己實現C++中的string類。 本文給出的實現包括string類的一些基本操作。 如:構造 拷貝構造 賦值 判斷相等 字串長度 []操作 字串拼接 <<序列化 swap操作等。 程式碼如下: #include <iostream> #in
C/C++程式設計教訓----資料結構的類型別名和memset
問題描述 學習微軟,我們經常會這樣定義資料結構, 並且定義了資料結構別名StructTest,和資料結構指標別名LPStructTest, 這樣定義也許讓程式的型別更加簡潔。 typedef _StructTest { int iVal; char csStr[100
c++筆記之資料型別轉換
#include <iostream> #include <string> using namespace std; class Complex { public: Complex() //預設建構函式 { real = 0; imag = 0;
C#入門——C#語法(資料結構)1
C#語言是一種面向物件的語言。C#程式結構大體可由註釋、名稱空間、類、Main方法和語句構成的。 一.註釋 註釋是什麼:為對某行或某段程式碼的解釋說明或忽略程式碼。 註釋的作用:方便自己閱讀與維護或讓他人能夠更好地理解自己的程式。 註釋分兩種:行註釋與塊註釋 1.行註釋 static voi
c語言描述資料結構應用
2 樹的操作 2.1實驗資料 學生的學號、姓名 2.2程式要求 根據輸入資料建立一棵二叉樹(第一個輸入資料作為根節點),要求:左子樹節點的學號總比根節點小,右子樹節點的學號總比根節點大。 (1)鍵盤輸入你所在宿舍的同學資訊到二叉樹; (2)按學號大小輸出所有同學資訊; (
c語言描述資料結構例項一
1 線性結構的操作 1.1實驗資料 學生的學號、姓名、性別、年齡 1.2程式要求 1、用線性表的順序儲存(陣列)儲存資料 (1)鍵盤輸入你所在宿舍的同學資訊到陣列; (2)遍歷輸出所有學生資料; (3)按姓名查詢並輸出指定學生資料,統計查詢的次數; (4)把陣列內容輸
【C#】【資料結構】001-線性表:順序表
C#資料結構:順序表結構 1、自定義順序表結構 using System.Collections; using System.Collections.Generic; /// <summary> ///線性表介面 /// </summary> /// <type
面試複習重點——資料結構、作業系統、計算機網路、資料庫
必看書籍:劍指offer、程式設計師面試寶典 來自:騰訊、搜狐、網易、烽火、百度、大眾點評、美團、風行 1. 死鎖是什麼?什麼情況下產生?怎麼解決? 2. 設計模式(尤其是單例模式,要會寫該模式的程式框架,要注意同步問題
《資料結構與演算法》之資料結構簡介
資料結構=資料+結構,資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。 一、資料的邏輯結構:指反映資料元素之間的邏輯關係的資料結構,其中的
部落格之資料結構與演算法目錄
一、結構 為了能夠方便的檢視資料結構與演算法知識點,我將文章目錄羅列了一下 (1)演算法 1.複雜度分析 演算法 時間和空間複雜度的簡單理解小述 2.排序演算法知識點總結 演算法 直接插入排序小述 演算法 希爾排序小述 演算法 氣
【C#】【資料結構】002-線性表:單鏈表
C#資料結構:單鏈表 1、自定義單鏈表結構: 單鏈節點類 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 單鏈表節點 ///