首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
堆是用來存儲動態數據的。動態數據最典型的例子就是鏈表。
形象的說:將若干個數據項按一定的原則前后鏈接起來,沒有數據項都有一個指向下一個數據的指針,則這些數據項靠指針鏈成一個表,最后的一個數據沒有指針(指針為NULL),這就是鏈表?梢钥闯鲦湵矸旁诖鎯ζ髦校⒉灰欢ㄏ髷到M一樣,連續存放,也可以分開存放。由于鏈的各節點均帶有指向下一個節點的地址,因而要找到某個節點,必須要找到上一個節點,如此類推,則可由第一個節點出發找到目的點。鏈表在數據庫建立和管理中用得比較普遍。
鏈表中的每個節點都具有相同的結構類型,它們是由兩部分組成,即數據部分(它們包含一些有用的信息),另一部分就是鏈的指針。下面就定義一個通信鏈節點的數據結構:
struct address
{
char name[30];
char street[40];
char city[20];
char state[10];
char zip[6];
struct address *next; /*pointer to next entry*/
}list_entry;
該結構中前五個成員是該節點的信息部分,最后一個成員是指向同一個結構類型的指針。即next又指向一個同樣結構類型的節點。
1.建立鏈表
建立鏈表時,首先要將第一個節點的內容存入堆中,為此要將堆中能存入該節點內容的內存區域首地址賦給一個指針。我們可以用malloc()函數來分配內存區域。如info是一個指針:
info=(struct address *)malloc(sizeof(list_entry));
當第一個節點存入有info指出的內存區后,再執行該函數,便得到狹義個節點的存儲地址info,此時將該info賦給上一個節點的next,并將該節點內容存入info指出的內存區,這樣兩個節點就鏈接起來了。此過程反復多次,就可不斷的將節點加入鏈表的尾端。
#include stdlib.h
#include alloc.h
#include stdio.h
#include string.h
struct address
{
char name[30];
char street[40];
char city[20];
char state[10];
char zip[6];
struct address *next;
}list_entry;
void inputs(char *,char *,int);
void dls_store(struct address*);
main()
{
struct address *info;
int i;
for(i=0;i<5;i++)
{
info=(struct address *)malloc(sizeof(list_entry));
inputs(enter name:,info->name,30);
inputs(enter street:,info->street,40);
inputs(enter city:,info->city,20);
inputs(enter state:,info->state,10);
inputs(enter zip:,info->zip,6);
dls_store(info);
}
}
void inputs(char *prompt,char *s,int count)
{
char p[255];
do
{
printf(prompt);
gets(p);
if(strlen(p)>count) printf(\n too long \n);
}
while(strlen(p)>count);
strcpy(s,p);
}
void dls_store(struct address *in)
{
static struct address *last=NULL;
if(!last) last=in;
else last->next=in;
in->next=NULL;
last=in;
}
inputs()函數比較簡單,就不說明了。
dls_store()函數是將輸入的節點地址寫到上一個節點的next指針項。其中定義的結構指針last是一個靜態變量,初始值為NULL,這意味著在編譯時將為該變量分配一個固定的存儲空間以存放其值。因初始值為NULL,這樣在第一次調用該函數時,由于它代表一個空指針,因而把由malloc()分配的第一個節點地址賦給它,使last指向該節點,第二次調用時,靜態變量last已指向第一個節點地址。如此反復調用,便建立起了n次調用產生的n個節點的鏈了(本題n=5)。
相關推薦:計算機等級考試二級C語言教程匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |