C語言結(jié)構(gòu)體和簡單操作鏈表

結(jié)構(gòu)體:
  • 1,基本定義:
{
       //成員列表
}轨域;

成員列表:
有基本數(shù)據(jù)類型定義的變量或者構(gòu)造類型的變量
example:

        struct student
        {
         int grade;
         int age;
         char name[32];   };

`student`:結(jié)構(gòu)體名稱
`struct student`:結(jié)構(gòu)數(shù)據(jù)類型雕沿,相當于`int,double迫横,char`等基本的數(shù)據(jù)類型鸥拧。
`struct student stu`;
`stu`:結(jié)構(gòu)體變量
訪問結(jié)構(gòu)成員:“.”,`stu.age;stu.grade`尺迂;
2,結(jié)構(gòu)體變量的初始化

struct student{
char name[32];
char sex;
int age;
};

(1)初始化1

struct student boy;
strcpy(boy.name,"jack");
boy.age = 24;
boy.sex ='m';

(2)初始化2
`struct studetn gril = {"jack",24,'m'}`;
和成員列表一一必須對應骗露。。
(3)定義的同時初始化(不建議)

struct student{
char name[32];
char sex;
int age;
}stu = {"fuck",'W',24};

* 嵌套定義結(jié)構(gòu)體:

struct student{
int a;
char b;
struct student stu;
};

這種方法不可以怪瓶。。

struct student{
int a;
char b;
struct student *ps;
};

指針大小的是固定的
* 3 無名結(jié)構(gòu)體

struct{
int age;
char name[16];
}stu;

**結(jié)構(gòu)體變量可以賦值給相同類型的變量**
* 4 ,宏定義結(jié)構(gòu)體名稱
`#define STU struct student`
* 5,結(jié)構(gòu)體的嵌套

struct date{
int year;
int month;
int day;
};
struct student{
char name[32];
int age;
struct date birthday;
};```

  • 6,結(jié)構(gòu)體指針:
struct student stu;
    struct student *p = &stu;
    strcpy(p->name,"hello");
    p->age = 13;
    p->birthday.year = 1990;
    p->birthday.month = 2;
    p->birthday.day = 13;
    printf("%s,%d,%d,%d,%d\n",p->name,p->age,p->birthday.year,p->birthday.month,p->birthday.day);

malloc() //申請堆空間
free() //釋放空間
//申請堆空間践美,大小為sizeof(struct student)
pa = (struct date *)malloc(sizeof(struct date));
free(pa);//申請釋放的堆空間

  • 7,typedef
    重新命名
    typedef int I;
    即給int取別名為I洗贰;
    結(jié)構(gòu)體的字符串代替;
typedef struct student{
    int age;
    char name[32];
}STU;
/*
struct student{
    int age;
    char name[32];
};
typedef struct student STU;*/

和宏定義的區(qū)別
typedef struct student* STT;
#define STD struct student*
STT stu1,stu2;//stu1 和stu2都是指針
STD stu3,stu4;//stu3是指針陨倡,stu4不是指針
define只是簡單的字符串替換

  • 8,結(jié)構(gòu)體的大小
    內(nèi)存對齊
    Linux:4字節(jié)
    Windows:8字節(jié)
struct student{   //默認從零開始
    char a;      //1  【0~8】
    long age;       //8  【9~16】
    char name[31]; //3   【17~48】
};
int main(){ 
    printf("%ld",sizeof(struct student));//48
    return 0;
}```//最長字節(jié)數(shù)的倍數(shù)
* 9 聯(lián)合體
union untype{
int a;
long b;
};
特點:每次只能操作一個成員變量敛滋。
分配空間:按最大數(shù)據(jù)類型分配空間兴革。
* 11,枚舉類型
  enum entype{
A,//0
B = 12,//12
C//13
};
枚舉類型中都是具體的數(shù)據(jù)杂曲,不能直接使用`.`的調(diào)用。擎勘。是一種數(shù)據(jù)類型咱揍,而不是構(gòu)造類型
* 12,鏈表
鏈式存儲結(jié)構(gòu)煤裙,線性存儲結(jié)構(gòu)
其大小可動態(tài)改變蟹地,鏈表是有一個個節(jié)點串起來的數(shù)據(jù)鏈
**節(jié)點**:由數(shù)據(jù)域和指針域構(gòu)成积暖;
數(shù)據(jù)域:存儲數(shù)據(jù)藤为;
指針域:存放下一個節(jié)點的地址怪与。
(1)創(chuàng)建鏈表
struct student{
int id;
struct student *next;
};
struct student *head;
malloc();
free()
創(chuàng)建一個頭節(jié)點:
struct student *head;
head = (struct student *)malloc(sizeof(struct student));
頭節(jié)點標識一個鏈表缅疟,即鏈表名稱
**頭節(jié)點的數(shù)據(jù)域不存放數(shù)據(jù),指針域存放第一個節(jié)點的地址**耘斩;
#######總結(jié):利用結(jié)構(gòu)體產(chǎn)生鏈表桅咆,感覺程序員都好聰明。。薛夜。
####作業(yè);
操作頭節(jié)點

include<stdio.h>

include<stdlib.h>

typedef struct student{
int ID;
char name[32];
struct student next;
}STU,
pSTU;
//創(chuàng)建節(jié)點
pSTU createNewNode(){
pSTU newLink;
newLink = (pSTU)malloc(sizeof(STU));
newLink->next = NULL;
return newLink;
}
//從頭部添加節(jié)點
pSTU addHeadLink(pSTU head){
pSTU temp = createNewNode();
printf("input ID:");
scanf("%d",&temp->ID);
printf("input name:");
scanf("%s",temp->name);
temp->next = head->next;
head->next = temp;
temp = NULL;
return head;
}
//顯示鏈表
void showLink(pSTU head){
pSTU p = head->next;
printf("\tID\tname\n");
while(p != NULL){
printf("\t%d\t%s\n",p->ID,p->name);
p = p->next;
}
return;
}
//從頭節(jié)點刪除
pSTU deleteHeadLink(pSTU head){
pSTU temp = head->next;
head->next = temp->next;
free(temp);
temp = NULL;
return head;
}
int main(int argc,char *argv[]){
pSTU head = createNewNode();
addHeadLink(head);
showLink(head);
deleteHeadLink(head);
showLink(head);
return 0;
}

操作尾節(jié)點

include<stdio.h>

include<stdlib.h>

typedef struct student{
int ID;
char name[32];
struct student next;
}STU,
pSTU;
//創(chuàng)建一個新節(jié)點
pSTU createNode(){
pSTU link;
link = (pSTU)malloc(sizeof(STU));
link->next = NULL;
return link;
}
//在尾部添加一個節(jié)點
pSTU addTailNode(pSTU head){
pSTU p = head;
while(p->next != NULL)
p = p->next;
/*
pSTU temp;
temp = (pSTU)malloc(sizeof(STU));
temp->next = NULL;
*/
pSTU temp = createNode();
printf("input ID:");
scanf("%d",&temp->ID);
printf("input name:");
scanf("%s",temp->name);
p->next = temp;
temp = NULL;
return head;
}
void showLink(pSTU head){
pSTU p = head->next;
printf("\tID\tname\n");
while(p != NULL){
printf("\t%d\t%s\n",p->ID,p->name);
p = p->next;
}
}
//尾刪;
pSTU deleteTailLink(pSTU head){
pSTU p1 = head;
pSTU p2 = head->next;
while(p2->next != NULL){
p2 = p2->next;
p1 = p1->next;
}
p1->next = NULL;
free(p2);
p2 = NULL;
return head;
}
int main(int argc,char *argv[]){
pSTU head = createNode();
int i = 0;
for(i = 0;i < 4;i++){
addTailNode(head);
}
showLink(head);
for(i = 0;i<2;i++)
deleteTailLink(head);
showLink(head);
return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晚伙,一起剝皮案震驚了整個濱河市俭茧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌民傻,老刑警劉巖场斑,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喧半,居然都是意外死亡青责,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門扁耐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产阱,“玉大人婉称,你說我怎么就攤上這事⊥醢担” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵俗壹,是天一觀的道長藻烤。 經(jīng)常有香客問我头滔,道長涎显,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任缀蹄,我火速辦了婚禮膘婶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悬襟。我一直安慰自己,他們只是感情好脊岳,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布割捅。 她就那樣靜靜地躺著,像睡著了一般亿驾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上儡蔓,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天疼邀,我揣著相機與錄音,去河邊找鬼获询。 笑死规求,一個胖子當著我的面吹牛卵惦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沮尿,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赴邻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奸焙,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彤敛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后墨榄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡阵翎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年郭卫,在試婚紗的時候發(fā)現(xiàn)自己被綠了背稼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡谓形,死狀恐怖疆前,靈堂內(nèi)的尸體忽然破棺而出寒跳,到底是詐尸還是另有隱情竹椒,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布书释,位于F島的核電站赊窥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锨能。R本人自食惡果不足惜芍耘,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一斋竞、第九天 我趴在偏房一處隱蔽的房頂上張望秃殉。 院中可真熱鬧,春花似錦钾军、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唇礁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围俘,已是汗流浹背琢融。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漾抬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓挽荠,卻偏偏與公主長得像平绩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捏雌,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容