




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
用戶自定義數據類型C語言程序設計任務驅動式教程導學對于結構體變量,應該怎樣賦初值呢??結構體類型的基本使用任務一結構體變量初始化就是定義結構體變量的同時,對變量賦初值。例如:1、結構體變量的初始化structstudent{ intnum;
/*學號為整型*/ charname[20]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/ floatscore; /*成績為實型*/}stu1={2012001,”張曉霞”,’W’,21,67},*stu2;2012001張曉霞W2167stu1結構體類型的基本使用任務一結構體類型是嵌套定義的,則初始化形式如下:1、結構體變量的初始化structdate{
intyear;
intmonth;
int
day;
};structstudent{intnum;
charname[20];
charsex;
intage;
structdatebirthday;floatscore;
}stu1={1018,”mali”,’W’,20,{1999,5,18},86};1018maliW20199951886stu1結構體類型的基本使用任務一2、結構體變量的引用structstudent{intnum;
charname[20];
charsex;
intage;
structdate{intyear;
intmonth;
int
day; }birthday;
floatscore;
}stu1,*stu2;結構體變量的使用是通過對其每個成員的引用來實現的,一般形式如下:
結構體變量名.成員名其中,“.”是結構體的成員運算符,它在所有運算符中優先級最高,因此,上述引用結構體成員的寫法可以作為一個整體看待。結構體變量中的每個成員都可以象同類型的普通變量一樣進行各種運算。例如:stu1.age;stu1.birthday.day
指向結構體的指針變量,則指針變量的成員項的表示形式為:
結構體指針變量->成員名。
例如:stu2->score;等價(*stu2).score;
(*stu2).birthday.day,stu2->birthday.day結構體類型的基本使用任務一#include<stdio.h>#include<string.h>main()
{structstudent{intnum;
charname[20];
charsex;
intage;
floatscore;
}stu1,stu2;結構體變量的賦值就是給各成員項的賦值。可用輸入語句或賦值語句來實現。3、結構體變量的輸入輸出stu1.num=1108;
strcpy(,”wangling”);scanf(“%c%d%f”,&stu1.sex,&stu1.age,&stu1.score);stu2=stu1;
printf(“num=%d\nname=%s\n”,stu2.num,);printf(“sex=%c\nage=%d\n
score=%f\n”,
stu2.sex,stu2.age,
stu2.score);注:相同結構體類型變量允許相互整體賦值,而不允許結構體變量對輸入、輸出等其他運算進行整體操作,只能對其成員項進行操作。結構體類型的基本使用任務一結構體類型內存空間大小取決于所有成員項所占內存的大小總和。
內存對齊原則,導致系統分配的空間可能大于實際計算的字節數。
系統和編譯器的不同計算的字節數也不同。
結構體類型內存空間大小需要用sizeof(結構體名)或sizeof(結構體變量名)來得到所需內存的字節數。
所有的數據類型是不分配空間的,只有當程序中定義了結構體類型的變量后,編譯系統才會按照該結構體的內存大小為其變量安排一片連續的存儲單元。4、結構體變量的內存分配結構體類型的基本使用任務一例如:structstudent{ intnum;
/*學號為整型*/ charname[10]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/
structdatebirthday;/*嵌套date結構體*/ floatscore; /*成績為實型*/}stu1;則sizeof(structstudent)或sizeof(stu1)的值均為24。4、結構體變量的內存分配numnamesexagescorex4字節10字節2字節4字節4字節技能實訓練一練技能實訓任務一1.根據某單位招聘考試結果信息。利用所學知識完成下表中數據的結構體輸入和輸出。編號姓名筆試成績面試成績總成績1501王虎89921811502李雪87961831503張揚8285167...............#include<stdio.h>voidmain(){structjob_exam{unsignednum;charname[10];intexama;intexamb;inttotal;}a={1501,"王虎",89,92};a.total=a.exama+a.examb;printf("編號姓名筆試面試總成績\n");printf("%4u%8s%6d%6d%8d\n",a.num,,a.exama,a.examb,a.total);}#include<stdio.h>voidmain(){structjob_exam{unsignednum;char
name[10];int
exama;int
examb;int
total;}*p,s[3]={{1501,"王虎",89,92},{1502,"李雪",87,96},{1503,"張揚",82,85}};p=s;printf("編號姓名筆試面試總成績\n");
for(inti=0;i<3;i++)
{(*p).total=(*p).exama+(*p).examb;//等價于p->total=p->exama+p->examb;printf("%4u%8s%6d%6d%8d\n",p->num,p->name,p->exama,p->examb,p->total);
/*等價于printf("%4u%8s%6d%6d%8d\n",(*p).num,(*p).name,(*p).exama,(*p).examb,(*p).total);*/p++;
}}編號姓名筆試成績面試成績總成績1501王虎89921811502李雪87961831503張揚8285167...............某單位招聘考試結果學習總結答一答1、結構體變量的初始化?2、結構體變量的引用?3、結構體變量的輸入輸出?4、結構體變量的內存分配?任務一用字符指針引用字符串感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學在前面的學習中,我們使用的是基本數據類型去定義變量,那么可以自定義數據類型嗎??導學結構體數據特點:1.各行內數據不盡相同;2.各行間數據情況相同;3.以行為單位處理數據.為什么要定義結構體類型呢?結構體類型的基本使用任務一結構體是一種構造類型(自定義數據類型),除了結構體變量需要定義后才能使用外,結數據構體的類型本身也需要定義。結構體由若干“成員”組成,每個成員可以是一個基本的數據類型,也可以是一個已經定義的構造類型。1、結構體的概念結構體類型的基本使用任務一2、基本思路繪制二維表格第一步:制作表頭第二步:畫出各行第三步:編輯各行數據使用結構體類型第一步:結構體類型說明第二步:結構體變量定義第三步:結構體變量引用如何轉換成C語言描述?結構體類型的基本使用任務一3、結構體類型的定義結構體類型說明的一般格式:struct<結構體類型名> {<類型名1><成員變量名1>;
<類型名2><成員變量名2>;......
<類型名n><成員變量名n>;};結構體類型關鍵字自定義的結構體類型標識符結構體類型成員列表結構體類型的基本使用任務一示例:structstudent{ intnum;
/*學號為整型*/ charname[20]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/ floatscore; /*成績為實型*/};完成下列學生信息表的結構體定義結構體類型定義描述結構的組織形式,不分配內存。結構體類型的基本使用任務一3、結構體類型的嵌套定義嵌套結構體類型就是一個結構體類型中包含結構體類型的成員項。一種表示方式:structdate{ intyear;
intmonth;
int
day;
};structstudent{ intnum;
/*學號為整型*/ charname[20]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/
structdatebirthday;/*嵌套date結構體*/ floatscore; /*成績為實型*/};結構體類型的基本使用任務一3、結構體類型的嵌套定義另一種表示方式:structstudent{ intnum;
/*學號為整型*/ charname[20]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/
structdate{
intyear;
intmonth;
int
day; }birthday;/*嵌套date結構體*/ floatscore; /*成績為實型*/};結構體類型的基本使用任務一4、結構體類型的遞歸定義結構體遞歸定義就是在一個結構體類型內部包含具有自身結構體類型的成員項。structnode{ intdata;
structnode*next;};例如:注意:結構體遞歸定義中必須使用結構體類型的指針成員項,不能使用本結構體類型的普通成員項。結構體類型的基本使用任務一第一種形式:先定義結構體類型,之后定義結構體變量。例如:5、結構體變量的定義structstudent{ intnum;
charname[20];
charsex;
intage;
floatscore;
};structstudent
stu1,stu2;
#defineSTUDENTstructstudentSTUDENT{ intnum;
charname[20];
charsex;
intage;
floatscore;
};
STUDENTstu1,stu2;也可以使用宏定義的方式來定義結構體。宏定義結構體類型的基本使用任務一第二種形式:在定義結構體類型的同時定義結構體變量。例如:5、結構體變量的定義structstudent{ intnum;
charname[20];
charsex;
intage;
floatscore;
}stu1,stu2;struct{ intnum;
charname[20];
charsex;
intage;
floatscore;
}stu1,stu2;第三種形式:直接定義結構體變量。類型名可以省略。例如:結構體類型的基本使用任務一類型重命名的一般格式如下:6、typedef類型重命名例如:typedefintINTEGER;
typedeffloatREAL;
例如:INTEGERa,b;等價inta,b;
REALx,y,z;等價floatx,y,z;
typedef
structstudent{ intnum;
charname[20];
charsex;
intage;
floatscore;
}STUDENT;
STUDENTstu1,stu2;
等價:structstudentstu1,stu2;typedef類型名別名;typedef除了給簡單的數據類型重命名之外,也可以給復雜的結構體重命名。結構體類型的基本使用任務一6、typedef類型重命名structstudent{ intnum;
charname[20];
charsex;
intage;
floatscore;
};
typedefstructstudentSTUDENT;STUDENTstu1,stu2;typedef只是對已有的類型名增加一個新的替換名,并不是定義新的類型,也不是取代現有的類型名。技能實訓練一練技能實訓任務一1.根據某單位招聘考試結果信息。利用所學知識完成下表中數據的結構體定義。編號姓名筆試成績面試成績總成績1501王虎89921811502李雪87961831503張揚8285167unsignednum;charname[10];intexama;intexamb;inttotal;{};structjob_exam編號姓名筆試成績面試成績總成績1501王虎89921811502李雪87961831503張揚8285167某單位招聘考試結果學習總結答一答1、結構體類型說明的一般格式?2、結構體類型的嵌套定義、結構體類型的遞歸定義?3、結構體變量的定義?4、typedef類型重命名?任務一結構體類型的基本使用感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學數組的元素類型可以是任意類型,只要所有元素的類型相同即可。顯然,數組元素的類型也可以是結構體類型,這樣的數組就是結構體數組。前面定義的結構體變量stu1、stu2描述了兩個學生的信息,如果我們想描述80個學生的信息,顯然,定義一個長度為80的結構體數組是更合適的選擇。?結構體數組和結構體指針變量任務二當數組數據元素的類型為結構體類型時,數組就是結構體類型的數組。結構體數組的每一個數據元素都是具有相同結構體類型的下標結構體變量。定義結構體數組的一般形式為:
struct結構體類型名結構體數組名[數組長度];例:structstudentstu[80];
功能:定義一個元素類型為“結構體類型名”的結構體數組,它的長度是“數組長度”。1、結構體數組(1)結構體數組的定義結構體數組和結構體指針變量任務二說明:定義后,系統為這個結構體數組分配一塊連續的空間。例如,上面定義的結構體數組stu內存分配情況如圖所示;
stu[0]1101ZhangYuM85.2stu[1]1102WangHuaM90.1stu[2]1103ChenYuanyuanF75.0……………stu[79]1180LiMinLiF82.9(1)結構體數組的定義結構體數組和結構體指針變量任務二(1)結構體數組的定義structstudent{intnum;charname[20];charsex;floatscore;};structstudentstu[80];structstudent{intnum;charname[20];
charsex;
floatscore;}stu[80];struct{intnum;charname[20];
charsex;
floatscore;}stu[80];和定義結構體變量一樣,定義結構體數組也有三種方式,效果均相同。以定義數組stu[80]為例,三種方式如下:結構體數組和結構體指針變量任務二structstudent{ intnum;
/*學號為整型*/ charname[10]; /*姓名為字符串*/ charsex;
/*性別為字符型*/ intage; /*年齡為整型*/ floatscore; /*成績為實型*/}stu[5];示例:根據學生信息表,定義一個結構體數組。(1)結構體數組的定義結構體數組和結構體指針變量任務二(2)結構體數組的初始化結構體數組初始化的方法與其它類型數組初始化的方法相同,只是數組中的每個元素都是結構體變量。定義數組的時候,數組長度可以不指定。編譯時,系統根據給出初值的結構體常量的個數來確定數組元素的個數。一個結構體常量應包括結構體中全部成員的值。
在定義結構體數組時,也可以對其進行初始化賦值,例如:structstudent{intnum;
charname[10];
charsex;
intage;
floatscore;
};structstudentstu[5]={{1201,”Liling”,’W’,21,85},{1202,”Zhangxing”,’M’,21,92.5},{1203,”Zhangfang”,’W’,20,62},{1204,”Chenhui”,’M’,21,78},{1205,”Wangmin”,’W’,19,47},
};對數組中全部元素進行初始化賦值,數組長度是可以省略的。結構體數組和結構體指針變量任務二(3)結構體數組的引用對結構體數組的引用通過逐個引用數組元素來實現。因為每個數組元素都是一個結構體變量,所以前述對結構體變量的引用方法都適用于結構體數組元素。例如,上例定義的結構體數組stu[80],可以采用如下形式引用該數組中元素的任一成員:strcpy(stu[1].name,“ZhangYu”);printf("%d,%s,%c,%.2f",stu[1].num,stu[1].name,stu[1].sex,stu[1].score);sum=sum+stu[i].score;
另外,結構體數組元素同樣可以整體被賦值。例如,以下語句是合法的:
stu[1]=stu[2];結構體數組和結構體指針變量任務二示例:輸出成績大于60分的學生信息及成績。(3)結構體數組的引用#include<stdio.h>structstudent{intnum;
charname[10];
charsex;
intage;
floatscore;
}
stu[5]={{1201,"Liling",'W',21,85},{1202,"Zhangxing",'M',21,92.5},{1203,"Zhangfang",'W',20,62},{1204,"Chenhui",'M',21,78},{1205,"Wangmin",'W',19,47}};voidmain(){inti;for(i=0;i<3;i++){if(stu[i].score>60)printf("num=%d,name=%s,sex=%c,age=%d,score=%f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score);}}結構體數組和結構體指針變量任務二2、結構體指針變量結構體指針變量就是指向結構體變量的指針變量。同其它類型一樣,指針同樣可以指向一個結構體類型變量,此時,指針變量的值就等于該結構體變量的首地址。指針變量也可以指向結構體數組中的元素。定義指向結構體變量指針的一般形式為:
struct
結構體名稱*結構體指針變量名稱;
例如:structstudent*pstu.stu;
功能:定義了一個指向“結構體名稱”的指針,該指針將來用于存儲某一結構體變量的首地址。
結構體指針變量也必須先賦值后使用。賦值就是把結構體變量的首地址賦值給該指針變量,如pstu=&stu。結構體數組和結構體指針變量任務二3、結構體類型的嵌套定義有了結構體指針變量,就能更方便地訪問結構體變量的各個成員項其訪問成員項的一般形式為:(*指針).成員名或指針->成員名
例如:(*pstu).num或pstu->num需要注意的是(*pstu)兩側的括號是不可以少的,因為成員運算符“.”的優先級高于間接尋址運算符“*”。結構體數組和結構體指針變量任務二讀程序3、結構體類型的嵌套定義#include<stdio.h>#include<string.h>voidmain(){structSTU
{charname[10];
intnum;
}b={"LiSiGuo",2042},*a;
a=&b;
strcpy(a->name,"YangSan");
a->num=2012;printf("name=%s\nnum=%d\n",,b.num);printf("name=%s\nnum=%d\n",a->name,a->num);}YangSan2012ab&bnamenum結構體數組和結構體指針變量任務二對于已定義結構體數組,若用一個變量來存放該結構體數組在內存中的首地址,則該變量為指向結構體數組指針變量。例如:定義結構體類型person和結構體指針變量為p。4、指向結構體數組的指針structperson{
charname[10];intage;
};
structperson*p,stu[3]={“zhang”,18,”wang”,20,”li”,17};p=stu;或p=&stu[0];
結構體數組和結構體指針變量任務二示例:用指針變量輸出結構體數組元素。
#include<stdio.h>structstudent{ intnum; charname[20]; charsex; floatscore; }stu[5]={{101,"Zhouping",'M',45},{102,"Zhangping",'M',62.5},{103,"Lioufang",'W',92.5},{104,"Chengling",'M',87},{105,"Wangming",'M',58}};voidmain(){structstudent*ps;printf("No\tName\t\t\tSex\tScore\t\n");for(ps=stu;ps<stu+5;ps++)printf(“%d\t%s\t\t%c\t%f\t\n”,(*ps).num,(*ps).name,(*ps).sex,(*ps).score);}
/*等價于:
printf(“%d\t%s\t\t%c\t%f\t\n”,ps->num,ps->name,ps->sex,ps->score);}*/技能實訓練一練技能實訓任務二1.編寫程序:查看下列3個學生的信息,包括學號、姓名、性別和成績。技能實訓任務二
#include<stdio.h>#include<string.h>voidmain(){structstudent{intnum;charname[20];charsex;doublescore; }stu[3]={{1101,"ZhangYu",'M',85.2},{1102,"WangHua",'M',90.1},{1103,"ChenYuanyuan",'F',75.0}},*p;printf("Thestudentsare:\n");printf("No\tName\t\tSex\tScore\t\n");for(p=stu;p<=stu+2;p++)/*使用指針變量p逐個引用結構體數組元素*/printf("%-6d%-20s%-2c%9.2f\n",p->num,p->name,p->sex,p->score);}學習總結答一答1、結構體數組2、結構體指針變量3、指向結構體數組的指針任務二結構體數組和結構體指針變量感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學同其它類型數據一樣,結構體類型數據也可以作函數參數。函數之間結構體類型數據的傳遞和其它類型數據一樣,是單向的“值傳遞”方式。同樣,指向結構體類型數據的指針也可以作函數參數,這時,被調用函數對數據的修改可以體現在調用函數中。?結構體與函數任務三函數的返回值除了可以是基本數據類型的數據外,還可以是結構體類型的數據,若函數返回值的類型是結構體類型則稱該函數為結構體類型函數。其一般定義形式:1、結構體類型的函數struct結構體類型名函數名(形參列表){
函數體}
其中,結構體類型必須是已定義的。結構體與函數任務三2、定義一個函數,利用循環執行3門課程的輸入、分別存放到結構體成員項的score數組中,最后計算出average的值;3、輸入3個同學的其他成員項的值,其實也就是給學生姓名成員項輸入值;4、利用循環輸出3個同學的姓名和平均成績。示例:每個學生有3門課成績,用函數輸入學生的成績,并求出每個學生的平均成績。structstudent{charname[10]; floatscore[3];
floataverage;};問題分析:1、要定義一個學生結構體類型:結構體與函數任務三示例:每個學生有3門課成績,用函數輸入學生的成績,并求出每個學生的平均成績。#include<stdio.h>structstudent{charname[10]; floatscore[3];floataverage;};structstudentinput(){structstudents;inti;floatsum=0;printf("enter3score:");for(i=0;i<3;i++){scanf("%f",&s.score[i]);sum=sum+s.score[i];}s.average=sum/3;returns;}voidmain(){structstudentstu[3];inti;for(i=0;i<3;i++){stu[i]=input();printf("entername:");scanf("%s",stu[i].name);}for(i=0;i<3;i++)printf("%10s%10.1f\n",stu[i].name,stu[i].average);}結構體與函數任務三2、結構體變量作函數參數#include<stdio.h>structstudent{intnum;char*name; charsex;floatscore;};voidmain(){structstudentstu1={1011,"zhangping",'M',41};voidprint(structstudentb);print(stu1);printf("num=%d\nname=%s\nsex=%c\nscore=%f\n",stu1.num,,stu1.sex,stu1.score);}voidprint(structstudentb){printf("num=%d\nname=%s\nsex=%c\nscore=%f\n",b.num,,b.sex,b.score);}結構體變量作函數參數進行整體傳送。讀程序,給出程序運行結果。結構體與函數任務三2、結構體變量作函數參數在C語言中允許用結構體變量作函數參數進行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數組時將會使得傳送的時間和空間開銷很大,嚴重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數參數進行傳送。這時由實參傳向形參的只是地址,從而減少了時間和空間的開銷。結構體與函數任務三示例:計算一組學生的平均成績和不及格人數。3、結構體指針變量作函數參數#include<stdio.h>structstudent{intnum; char*name; charsex; floatscore; }stu[5]={{1011,"Liling",'M',41},{1012,"Zhangxing",'W',68},{1013,"Zhangfang",'W',97},{1014,"Chenhui",'W',83},{1015,"Wangmin",'M',78}};voidmain(){structstudent*ps;voidave(structstudent*ps);ps=stu;ave(ps);}voidave(structstudent*ps){intc=0,i;floatave,s=0;for(i=0;i<5;i++,ps++){s+=ps->score;if(ps->score<60)c+=1;}printf("s=%f\n",s);ave=s/5;printf("average=%f\ncount=%d\n",ave,c);}技能實訓練一練技能實訓任務三1.查看3個學生的信息,包括學號、姓名、性別和成績。要求調用子函數display()實現顯示功能,用指向結構體的指針作函數參數。請參照下面的運行結果編寫程序:#include<stdio.h>structstudent{intnum;charname[20];charsex;floatscore;};display(structstudent*s)/*指向結構體變量的指針做形參*/{structstudent*p;for(p=s;p<=s+2;p++)printf("%-6d,%-20s,%-2c,%-6.2f\n",p->num,p->name,p->sex,p->score);}voidmain(){structstudentstu[3]={{1101,"ZhangYu",'M',85.2},{1102,"WangHua",'M',90.1},{1103,"ChenYuanyuan",'F',75.0}};display(stu);/*結構體數組名做實參*/}學習總結答一答1、結構體類型的函數的一般定義形式。2、結構體變量作函數參數3、結構體指針變量作函數參數任務三用字符指針引用字符串感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學為什么要分配動態內存?數組的長度固定不變。所需的內存空間取決于實際輸入的數據多少。?單鏈表的建立任務四(1)分配內存空間函數malloc()調用形式:(類型說明符*)(size)類型說明符:表示把該區域用于何種類型。(類型說明符*):表示把返回值強制轉換為類型說明符的指針。size:是一個無符號整數。功能:在內存的動態存儲區中分配一塊長度為“size”字節的連續區域。函數返回值為該區域的首地址。例如:pc=(char*)malloc(100);//表示分配100個字節的內存空間,并強制轉換為指向字符數組的指針類型,并且把該指針賦值給指針變量pc.1、動態內存分配和釋放單鏈表的建立任務四(2)分配內存空間函數calloc()調用形式:(類型說明符*)calloc(n,size)功能:在內存動態存儲區中分配n塊長度為“size”字節的連續區域。函數返回值為該區域的首地址。(類型說明符*):表示把返回值強制轉換為類型說明符的指針。calloc(n,size):表示在內存動態存儲區中分配n塊長度為“size”字節的連續區域。例如:ps=(structstu*)
calloc(2,sizeof(structstu));/*sizeof(structstu):是用來求stu結構體的長度。整個語句的意思是按照stu的長度分配2塊連續的區域,并且強制轉換為指向stu類型的指針類型,并把其首地址賦值給指針變量ps*/單鏈表的建立任務四(3)釋放內存空間函數free()調用形式:free(void*ptr);功能:釋放ptr所指向的一塊內存空間,pir是一個任意類型的指針變量,它指向被釋放區域的首地址。單鏈表的建立任務四示例:分配一塊區域,輸入一個學生數據并輸出。#include<string.h>#include<stdlib.h>#include<stdio.h>voidmain(){structstudent{intnum;char*name; charsex;floatscore;}*ps;1、動態內存分配和釋放ps=(structstudent*)malloc(sizeof(structstudent));if(ps!=NULL){ps->num=102;strcpy(ps->name,"zhangping");ps->sex='M';ps->score=62.5;printf("number=%d\nname=%s\n",ps->num,ps->name);printf("sex=%c\nscore=%f\n",ps->sex,ps->score);free(ps);}}單鏈表的建立任務四2、單鏈表的建立數組屬于靜態內存分配,特點是邏輯關系上相鄰的兩個元素在物理存儲位置上也相鄰;優點:可以隨機存取表中任一元素,方便快捷;缺點:在插入或刪除某一元素時,需要移動大量元素。解決問題的思路:利用動態數據結構,它主要利用動態內存分配,使用結構體和指針來實現數據結構。也就是我們在結構體定義中學習的結構體的遞歸定義。單鏈表的建立任務四(1)單鏈表特點結點在存儲器中的位置是隨意的,即邏輯上相鄰的數據元素在物理上不一定相鄰。如何實現?通過指針來實現!每個結點至少包含兩部分:數據域和指針域2、單鏈表的建立單鏈表的建立任務四(1)單鏈表特點結點:數據元素的存儲表示。由數據域和指針域兩部分組成;2、單鏈表的建立數據指針指針數據指針樣式:或數據域:存儲元素數據。指針域:存儲直接后繼或者直接前驅的存儲位置。單鏈表的建立任務四單鏈表存放示意圖如下:2、單鏈表的建立heada1a2……an∧頭指針首結點內部結點末尾結點nextdata單鏈表的建立任務四頭指針是指向鏈表中首結點的指針;首結點是指鏈表中的第一個數據元素a1的結點。內部結點是指首元結點之后,末尾結點之前的所以結點。尾結點是指鏈表的最后一個結點。2、單鏈表的建立單鏈表的建立任務四例如:類型定義為:typedefstructnodel{chardata;
structnodel*next;
}node,*pointer;2、單鏈表的建立單鏈表的建立任務四2、單鏈表的建立例如:用單鏈表結構來存放26個英文字母組成的線性表(a,b,c,……,z),請寫出c語言程序。實現思路:先開辟頭指針,然后陸續為每個結點開辟存儲空間并及時賦值,后繼結點的地址要提前送給前面的指針。
#include<string.h>#include<stdlib.h>#include<stdio.h>typedefstructnode{chardata;structnode*next;}node;node*p,*head;intn;voidbuild(){inti;head=(node*)malloc(sizeof(node));p=head;for(i=1;i<26;i++){p->data=i+'a'-1;p->next=(node*)malloc(sizeof(node));p=p->next;}p->data=i+'a'-1;p->next=NULL;}voiddisplay(){p=head;while(p){printf("%c",p->data);p=p->next;}}voidmain(){build();display();}學習總結答一答1、動態內存分配和釋放?2、單鏈表的建立?任務四單鏈表的建立感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學單鏈表有哪些基本操作呢??單鏈表的基本操作任務五
在單鏈表中進行查找操作,就是根據給定的關鍵字的值,從頭指針所指向的結點開始,找結點的值和給定的關鍵字值是否相等,如果相等則查找成功,否則繼續判斷下一結點是否相等,重復以上操作,直到鏈表結束,查找失敗。
structnode
{chardata;
structnode*next;
};1、單鏈表的查找單鏈表的基本操作任務五1、單鏈表的查找wP!=NULL&&p->data!=x
p=p->next;xP=h;habwz∧phabwz∧p
頭指針單鏈表的基本操作任務五p=q->next;//首先保存b的指針,靠它才能找到c;q->next=p->next;//將a,c兩結點相連,淘汰b結點;free(p);//徹底釋放b結點空間2、單鏈表的刪除在單鏈表中刪除某元素b的示意圖如下:abwppq->next
q->next->nextp->next;刪除動作的核心語句(要借助輔助指針變量p):單鏈表的基本操作任務五
del(structnode*h,charx){structnode*p,*q;
if(h==NULL)
{printf("Listisnull.\n");
return0;}
q=h;
p=h->next;
while(p!=NULL&&x!=p->data)
{q=p;p=p->next;}
if(p!=NLILL)
{q->next=p->next;free(p);
return1;}
elsereturn0;}單鏈表的基本操作任務五3、單鏈表的插入在單鏈表中插入一個元素X=b的示意圖如下:acppq->next
s->nextacppbs插入x單鏈表插入的核心語句:
step1:s->next=p;
step2:q->next=s;單鏈表的基本操作任務五insert(structnode*h,char
x){structnode*p,*q,*s;s=(structnode*)malloc(sizeof(structnode));s->data=x;
q=h;
p=h->next;while(p!=NULL&&x>p->data)
{q=p;
p=p->next;}s->next=p;q->next=s;}學習總結答一答1、單鏈表的查找?2、單鏈表的插入?3、單鏈表的刪除?任務五單鏈表的基本操作感謝觀看!用戶自定義數據類型C語言程序設計任務驅動式教程導學什么是共用體類型??共用體和枚舉類型任務六在“共用體”中,各成員共享一段內存空間,一個共用體變量的長度等于各成員中最長的長度。共用體變量可被賦予任一成員值,但每次只能賦一種值。共用體類型的定義和共用體變量的說明一個共用體類型必須過定義之后,才能把變量說明為該共用體類型。共用體類型是一種特殊的構造類型,它的最大特點是所有成員共享同一存儲單元。1、共用體類型與結構體類型的區別共用體和枚舉類型任務六2、共用體類型與共用體變量(1)共用體類型的定義一般形式:union共用體類型名{類型名成員項1名稱;類型名成員項2名稱;類型名成員項3名稱;……};例如:
uniondata
{shorti;
charch;
floatf;
};ichf注:sizeof(uniondata)取決于占空間最多的那個成員變量。共用體和枚舉類型任務六1、共用體類型與共用體變量(2)
共用體類型變量定義的三種方式。
先定義共用體類型,再定義共用體類型變量。
例如:
uniondata
{shorti;
charch;
floatf;
};共用體和枚舉類型任務六1、共用體類型與共用體變量(2)共用體類型變量定義的三種方式。
在定義共用體類型的同時定義共用體類型變量。例如:uniondata
{shorti;
charch;
floatf;
}a,b,c;共用體和枚舉類型任務六1、共用體類型與共用體變量(2)共用體類型變量定義的三種方式。
在定義共用體類型時,省略共用體類型名,同時定義共用體類型變量。例如:union
{shorti;
charch;
floatf;
}a,b,c;共用體和枚舉類型任務六1、共用體類型與共用體變量(3)共用體變量的引用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高級經濟師《人力資源管理》試題(網友回憶版)含答案
- 六年級上冊音樂教學計劃模板
- 餐飲企業員工勞動合同范本(含試用期工資調整規定)
- 病毒式用戶生成內容營銷合同
- 成立分公司及區域市場拓展與維護協議
- 保險業保險科技市場趨勢分析合同
- 智能倉儲空間轉讓與物聯網技術應用合同
- 老人健康預防課件
- 美術課件小學生
- 村居干部考試題目及答案
- 合格考海南生物試題及答案
- 2025年廣東省深圳市初中地理中考學業水平考試模擬卷(二)(含答案)
- 2024年遼寧省普通高等學校招生錄取普通類本科批(物理學科類)投檔最低分
- 鈑金門板修復流程
- (高清版)DB11∕T2333-2024危險化學品生產裝置和儲存設施長期停用安全管理要求
- 安徽省2024年普通高校招生普通高職(專科)提前批院校投檔分數及名次
- 重慶市地圖矢量動態模板圖文
- LY/T 2005-2024國家級森林公園總體規劃規范
- 2025年四川大學自主招生個人陳述的自我定位
- 2025年福建省建工集團及下屬集團招聘235人高頻重點提升(共500題)附帶答案詳解
- 上海市混合廢塑料垃圾熱解處理項目可行性研究報告
評論
0/150
提交評論