1220學(xué)習(xí)總結(jié)

復(fù)雜數(shù)據(jù)類型

1.結(jié)構(gòu)體

    基本定義:
    struct 結(jié)構(gòu)名
    {
        //成員列表
    };
    成員列表:
        由基本數(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等
    struct student stu;
        stu:結(jié)構(gòu)體變量
    訪問結(jié)構(gòu)成員:"."
        訪問結(jié)構(gòu)體成員:
            stu.name;
            stu.grade;
            stu.age;

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 student girl = ("locy",'f',20);
    (3)初始化3(不建議)
        聲明結(jié)構(gòu)體時(shí),定義結(jié)構(gòu)體變量
        聲明結(jié)構(gòu)體時(shí),定義結(jié)構(gòu)體變量
        struct student
        {
            char name[32];
            char sex;
            int age;
        }stu,stu1;
        struct student
        {
            char name[32];
            char sex;
            int age;
        }stu{"xiaoming",'m',22};

3.無名結(jié)構(gòu)體

    struct
    {
        int age;
        char name[16];
    }stu;
    無名結(jié)構(gòu)體一般不使用

4.宏定義結(jié)構(gòu)體

    宏是原地替換
    struct student
    {
        char name[32];
        char sex;
        int age;
    };
    #define STU struct student
    STU stu,stu1; <------> struct student stu,stu1;

5.結(jié)構(gòu)體的嵌套

    struct date
    {
        int year;
        int month;
        int day;
    };
    struct student
    {
        char name[32];
        int age;
        struct date birthday;
    };
嵌套定義結(jié)構(gòu)體
    //不可以   
    struct student
    {
        char name[32];
        int age;
        struct student stu; //stu大小不確定
    };
    //可以
    struct student
    {
        char name[32];
        int age;
        struct student *p;  //因?yàn)橹羔樀拇笮」潭?    };

6.結(jié)構(gòu)體數(shù)組
struct student arr[3];

7.結(jié)構(gòu)體指針

    struct date *pa;
    struct student *pb;
    #include<stdlib.h>
    //空間的申請(qǐng)和釋放
    malloc();   //申請(qǐng)堆空間
    free();     //釋放空間
    //申請(qǐng)一塊堆空間,大小為:sizeof(struct student)
    pa = (struct date *)malloc(sizeof(struct date));
    free(pa);   //釋放申請(qǐng)的堆空間

8.typedef

    重新取名
        typedef int I;
        給int取名為I
    結(jié)構(gòu)體
        typedef struct student
        {
            //成員列表
        }STU;
        兩者等價(jià):
        struct student
        {
            //成員列表
        };
        typedef struct student STU;
    和宏定義的區(qū)別
        typedef struct student STU;
        #define STU struct student;

9.結(jié)構(gòu)體大小

    內(nèi)存對(duì)齊:
        Linux: 4字節(jié)
        Windows:8字節(jié)
    默認(rèn)從偏移量為0的位置開始存儲(chǔ)
    每個(gè)成員所占字節(jié)數(shù)是其自身大小的整數(shù)倍
    是最大成員所在字節(jié)的整數(shù)倍

10.聯(lián)合體

    union untype
    {
        int a;
        long b;
    };
    特點(diǎn):
        不管是賦值還是訪問每次只能操作一個(gè)變量
        分配空間按最大數(shù)據(jù)類型分配

11.枚舉類型

    enum entype
    {
        A,  //默認(rèn)從0開始,一般是大寫
        B
    };
    枚舉類型的值可以拿過來直接用

12.鏈表

    鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),線性存儲(chǔ)結(jié)構(gòu)
    其大小可動(dòng)態(tài)改變,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)串起來的數(shù)據(jù)鏈
    結(jié)點(diǎn):
        由數(shù)據(jù)域和指針域組成,
        數(shù)據(jù)域:存放數(shù)據(jù)
        指針域:存放下一個(gè)結(jié)點(diǎn)的地址
    (1)創(chuàng)建鏈表
        struct student
        {
            int id;
            struct student *next;
        };
        struct student *head;
        malloc()
        free()
        創(chuàng)建一個(gè)頭結(jié)點(diǎn):
            struct student *head;
            head = (struct student *)mallocsizeof((struct student));
            頭結(jié)點(diǎn)標(biāo)識(shí)一個(gè)鏈表,即鏈表名稱
            頭結(jié)點(diǎn)的數(shù)據(jù)域不存放數(shù)據(jù),指針域存放第一個(gè)結(jié)點(diǎn)的地址,
            頭結(jié)點(diǎn)只是為了標(biāo)識(shí)這個(gè)鏈表

鏈表例子

#include<stdio.h>
#include<stdlib.h>  //malloc,free
struct student
{
int ID;
char name[32];
struct student *next;
};
#define LEN sizeof(struct student)
//=============頭插=============================================
struct student *add_link(struct student *head)
{
struct student *temp = (struct student*)malloc(LEN);
printf("input ID:");
scanf("%d",&temp->ID);
printf("input name:");
scanf("%s",temp->name);
//temp->next = NULL;
temp->next = head->next;
head->next = temp;
temp = NULL;
return head;
}
//==============頭刪============================================
struct student *sub_link(struct student *head)
{
struct student *temp = head->next;
head->next = temp->next;
free(temp);
temp = NULL;
return head;
}
//=============尾刪============================================
struct student *subwei(struct student *head)
{
struct student *temp = head->next;
struct student *temp1 = head;
while(temp->next != NULL)
{
    temp1 = temp;
    temp = temp->next;
}
temp1->next=NULL;
free(temp);
temp = NULL;
return head;
}
//===============尾插========================================
struct student *addwei(struct student *head)
{
struct student *p = head;
struct student *temp= (struct student*)malloc(sizeof(LEN));
printf("input ID:");
scanf("%d",&temp->ID);
printf("input name:");
scanf("%s",temp->name);
while(p->next != NULL)
{
    p = p->next;
}
temp->next = p->next;
p->next = temp;
temp = NULL;
return head;
}
//==============打印============================================
void show_link(struct student *head)
{
struct student *p = head->next;
printf("\tID\tname\n");
while(p != NULL)
{
    printf("\t%d\t%s\n",p->ID,p->name);
    p = p->next;
}
return;
}
//=============主函數(shù)=========================================
int main()
{
//創(chuàng)建頭結(jié)點(diǎn)
struct student *head;
struct student *p;
head = (struct student*)malloc(sizeof(struct student));
head->next = NULL;
//添加
int i;
for(i=0;i<4;i++)
    add_link(head);
show_link(head);
sub_link(head);
show_link(head);
subwei(head);
show_link(head);
addwei(head);
show_link(head);
return 0;
}

總結(jié)

學(xué)到現(xiàn)在綜合性開始很強(qiáng)了,要注意把以前的知識(shí)點(diǎn)串起來
鏈表和結(jié)構(gòu)體的運(yùn)用要熟練,注意理解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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