使用單鏈表資料結構儲存結構化的學生資訊

2021-10-07 06:22:18 字數 3339 閱讀 3838

使用單鏈表資料結構儲存結構化的學生資訊

定義乙個學生結構體,包含有:學號,姓名,成績。輸入n個學生的資訊,並進行基本的鍊錶操作。(更好的閱讀體驗,請在我的部落格**上閱讀此文:使用單鏈表資料結構儲存結構化的學生資訊)

這是一道主要考察基礎知識點運用的題目,涉及到結構體、指標、字元陣列等相關的概念。因此,要熟練的掌握這些知識點的定義與使用。

2.1學生結構體的定義

typedef struct student_nodestudentnode, *pstunode;
其中,struct關鍵字表示定義的是結構體資料型別,student_node是結構體型別名,花括號中依次列舉該型別的每個成員變數的型別及其名稱,每個成員變數的資料型別可以是基本資料型別也可以是自定義資料型別。一旦定義了乙個結構體型別,就可以像基本資料型別一樣使用,定義該型別的變數、陣列和指標。如下所示:

1)struct student_node stu_node;  // 定義了乙個student_node型的變數 stu_node;

2)struct student_node s[20];  //定義了乙個student_node型別的陣列s,用於存放20個該型別的學生資料。

3)struct student_node *p;  //定義了乙個student_node型的指標變數p;

4)為指標p初始化賦值的方式,和基本資料型別一致: p = &stu_node。使用指標訪問結構體變數的成員可以使用如下兩種方式:

①(*結構體指標變數名).成員名;  (*p).num;

②結構體指標變數名->成員名;    p->num;

為了簡化結構體變數的定義,可以使用c語言提供的型別別名定義語句typedef,為結構體型別取乙個別名。studentnode, *pstunode就是struct student_node的別名,然後可以使用student_node的別名studentnode定義變數stu_node,可以使用pstunode定義指向student_node型別的指標p。如果不再使用student_node定義變數,則可以在定義結構體型別的時候省去,如果需要使用到,則不可以省略去。

2.2 使用尾插法建立不帶頭結點的學生鍊錶

//尾插法建立學生鍊錶.

studentnode * init_list_tail()else

} return head;

}

init_list_tail()是返回值為studentnode型指標的函式。

gets(p->name)是輸入姓名字串。在c語言中,輸入字元的方式有getchar()、scanf(「%s」,str)、gets(str),其中①scanf函式不能輸入空格;②getchar()函式是逐個字元輸入;③gets()會將』\n』作為輸入終止符,因此要注意在這個函式前將回車符消除掉。

2.3 增加鍊錶節點

//在鍊錶頭部新增學生節點資訊

int insert_stu_head(pstunode *head)

//錄入學生節點的基本資訊

scanf("%u",&(p->num));

scanf("%s",p->name); // %s,這裡的字串輸入不能有空格

scanf("%f",&(*p).score);

//頭插法插入乙個節點

p->next = *head;

*head = p;

return 1; //只是返回標誌

}

malloc()是申請記憶體空間的函式,與之對應的是free()函式。p = (pstunode)malloc(sizeof(studentnode)))代表

申請sizeof(studentnode)大小的記憶體空間,並轉換為pstunode型別的指標賦給p。

2.3 刪除score<60的學生節點

//刪除score<60的學生節點

void del_stu_by_score(pstunode *head)else

free(temp);

}else

}}

因為刪除的節點可能會是首節點,可能需要改變首節點的指向,因此要傳入(pstunode *head,二級指標)這個引數。由於使用的是不帶頭結點的鍊錶,在做判斷的時候,需要區分第乙個節點和其餘節點。

2.4 查詢學生姓名為」xiaoming」的學生資訊

studentnode * search_stu_by_name(pstunode head, char *str)

p = p->next;

} return null;

}

注意,這裡的傳參,是乙個字元指標str。要注意字元指標和字元陣列的區別,字元陣列名是乙個常量,字元指標變數本身是乙個變數,用於存放字串的首位址,字串本身是儲存在以該首位址開始的一塊連續的記憶體空間中並以』\0』作為字串的結束。

常用的字串處理函式由提供支援。①strlen,字串長度統計函式;②strcat,連線兩個字串;③strcpy將乙個字串複製到另乙個字元陣列中;④strcmp,比較兩個字串的大小;⑤strlwr,將字串中大寫字母轉換成小寫字母;⑥strupr,將字串中小寫字母轉換成大寫字母。

2.5 修改學生資訊

//修改學生學號為 modify_num 的學生姓名為 'itour'。1:成功,0:未找到該人

int edit_stu_by_num(pstunode head)

p = p->next;

}return 0;

}

2.6 鍊錶的遍歷訪問

void print_list(pstunode head)

}

注意輸入輸出的格式控制,unsigned 無符號整形,格式為%u;float浮點型別,%.2f 代表輸出的浮點數帶有兩位小數;%s代表的是字串。

指標、結構體、字串、陣列,是c語言中最重要的幾個模組。在程式設計開發中,這幾個知識點往往會配合使用,比如常見的有:指向字串的指標、指向陣列的指標、指向結構體的指標、字元陣列等等。熟練掌握後,使用起來會很靈活,能實現的功能也是異常強大。

使用c語言可以很方便的控制計算機硬體,因此,它會經常的被用在作業系統、嵌入式、物聯網、驅動開發等領域。我們所熟知的作業系統,如windows、linux就是使用c語言進行開發的。作業系統的某些模組開發會經常的涉及到鍊錶、結構體,比如常見的記憶體管理模組中,乙個記憶體頁就是使用乙個結構體進行描述,多個記憶體頁會使用鍊錶進行連線起來,從而達到高效的使用。

資料結構化與儲存

1.將新聞的正文內容儲存到文字檔案。soup beautifulsoup res.text,html.parser content soup.select show content 0 text f open news.txt w encoding utf 8 f.write content f.c...

資料結構化與儲存

作業是 同學的,因為沒有對新聞資訊做提取,所有無法新增新聞資訊到字典。已練習pandas庫的相關使用方法,匯出excel檔案。ps 自己的 會盡快修改!import requests from bs4 import beautifulsoup from datetime import datetim...

資料結構化與儲存

1.將新聞的正文內容儲存到文字檔案。newscontent soup.select show content 0 text f open news.txt w f.write newscontent f open news.txt r print f.read 3.安裝pandas,用pandas....