1. 程式人生 > >C++複習之資料結構

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> /// 單鏈表節點 ///