數(shù)據(jù)結(jié)構(gòu)入門-零C基礎(chǔ)者適用(ZZ)
    查看(1484) 回復(fù)(1)
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發(fā)表于 2010-08-13 23:09
    樓主
    很多朋友抱怨說嚴(yán)蔚敏的書很難,復(fù)習(xí)效果不理想。我現(xiàn)在一面在講大家要耐心,要多查多問,而轉(zhuǎn)過頭來看到那些符號,想起自己當(dāng)初C語言60分的成績,初學(xué)數(shù)據(jù)結(jié)構(gòu)的茫然,一步一步爬過來的辛苦,于是有了寫個數(shù)據(jù)結(jié)構(gòu)入門的想法,但愿對剛剛?cè)腴TC語言基礎(chǔ)不好和大跨考的朋友們有所幫助,數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)已經(jīng)進入正常軌道的朋友可以飄過。
    我重新審視嚴(yán)書,概念與文字描述的內(nèi)容都是易懂的,而算法與程序往往是卡住我們的地方。我試著解釋每個符號的含義,C語言的基礎(chǔ)知識點,圖論中的難點,等等。但應(yīng)該很少會涉及概念性的知識點。

    本節(jié)主要講了結(jié)構(gòu)體定義的N種不同寫法,類型定義符typdef的用法,引用機制。

    P9頁例1-6

    在C語言中,最簡單的結(jié)構(gòu)體是這樣的:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct ADT
    {
        int x,y;
    };
    其中ADT是結(jié)構(gòu)的名稱,x和y是結(jié)構(gòu)體的數(shù)據(jù)成員,注意{}后面的分號,這個是不能忘掉的。
    現(xiàn)在添加一個成員函數(shù)(這實際上是C++的內(nèi)容),即數(shù)據(jù)結(jié)構(gòu)中所謂的基本操作,如下:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct ADT
    {
        int x,y;
        void x_dayu_y()
        {
            if(x>y)
                printf("x>y
    ");
            else
                printf("x<=y
    ");
        };
    };
    關(guān)于函數(shù)和if..else…語句的知識請參閱C語言課本,這個不用解釋的吧。下面給出完整的程序,來描述這個結(jié)構(gòu)是如何被使用的。當(dāng)我說到“完整的程序”的時候,你完全可以在VC++6.0上來運行它。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #include<stdio.h>

    struct ADT
    {
        int x,y;
        void x_dayu_y()
        {
            if(x>y)
                printf("x>y
    ");
            else
                printf("x<=y
    ");
        };
    };

    int main()
    {
        int a;
        a=1;
        ADT adt; // 定義一個結(jié)構(gòu)體變量,請區(qū)別:結(jié)構(gòu)體變量adt的類型是結(jié)構(gòu)體ADT
        adt.x=1; // 賦值
        adt.y=2;
        adt.x_dayu_y(); // 基本操作
        return 0;
    }
    結(jié)構(gòu)體的知識暫時介紹這些,對于理解例1-6的結(jié)構(gòu)已經(jīng)夠用了。
    在此強調(diào)一點,嚴(yán)書上的程序都是偽代碼描述,完全COPY到程序里是肯定不能執(zhí)行的。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    ADT Triplet
    {
        InitTriplet(&T,v1,v2,v3)
        ……
    }ADT Triplet
    ADT Triplet可以理解為結(jié)構(gòu)體名稱,ADT即為書中前文提到的Abstract Data Type,而Triplet即為三元組,函數(shù)InitTriplet(&T,v1,v2,v3),此外偽代碼并未指明返回值,需要解釋一下的是符號&的含義,&在C++中表示引用,完整的程序如下:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #include<stdio.h>

    void f(int &a,int b)
    {
        a=100;
        b=100;
    }

    int main()
    {
        int a=1,b=1;
        f(a,b);
        printf("%d %d
    ",a,b);
        return 0;
    }

    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發(fā)表于 2010-08-13 23:10
    沙發(fā)
    實際上函數(shù)f執(zhí)行后,a=100,b=1,這就是引用符&的作用。實際上,在C語言中,&是地址符,C中的地址與指針的傳遞過程過于復(fù)雜,不作解釋以免添亂,而這也正是C++中引入引用機制的原因。
    實際上這個例題很簡單,選擇它只是為了引出結(jié)構(gòu)體和引用機制的知識點,如果還有需要解釋的地方,請告訴我!

    P10頁(1)—(11)
    (1)
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #define TRUE 1
    命令define的詳細作用請參閱C語言課本,此處只作簡單說明:
    #define TRUE 1的效果是,在預(yù)編譯的時候,程序中所有的“TRUE”都被機械的替換為1,1代表真值。(在控制臺程序中TRUE不被支持,而在windows編程中TRUE與true等同。)

    類型定義符typedef,詳細請參閱C語言課本。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef int Status;
    定義一個變量時,Status a;與int a;的效果是相同的,類型定義符typedef只是為了使用上的方便,在windows編程中你會見到大量的類型定義。

    下面請注意了,講到數(shù)據(jù)結(jié)構(gòu)嚴(yán)書中經(jīng)常會見到的結(jié)構(gòu)體定義方法。

    如下面這個使用了類型定義符的結(jié)構(gòu)體定義:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
    }Point,*lPoint;
    其核心實際上就是前面已經(jīng)講過的
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct node
    {
        int x,y;
    };
    只不過把名稱ADT換成了node。
    這里typedef的作用:
    將類型struct node{}重定義為Point;
    將類型struct node {}*重定義為lPoint;(typedef struct node{}* lPoint
    注意此處Point與lPoint的名稱不能相同,前者是結(jié)構(gòu)體名稱,后者是結(jié)構(gòu)體指針名稱。
    在此處,可以省略struct后面的結(jié)構(gòu)體名稱node,寫成如下形式:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct
    {
        int x,y;
    };
    下面是完整的程序,來描述結(jié)構(gòu)體是如何被使用的。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #include<stdio.h>
    #include<stdlib.h>

    typedef struct
    {
        int x,y;
    }Point,*lPoint;

    int main()
    {
        Point a;
        a.x=1; // e使用結(jié)構(gòu)體變量時用的是“.”
        a.y=1;
        lPoint b; // 定義結(jié)構(gòu)體指針
        b=(lPoint)malloc(sizeof(Point)); // 要給指針分配內(nèi)存
        b->x=1; // 使用指針時用的是“->”
        b->y=1;
        Point* c; // 與上面定義結(jié)構(gòu)體指針是一回事,寫法不一樣而已
        c=(Point*)malloc(sizeof(Point));
        c->x=1;
        c->y=1;
        return 0;
    }
    書中還會看到:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
        struct node* next;
    }Point,*lPoint;
    這里的node不能省略,其余不再做過多的解釋。有關(guān)指針與內(nèi)存分配的知識點,將在以后章節(jié)中講到。

    嚴(yán)書從(2)到(11)是把C語言的知識簡單帶過

    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發(fā)表于 2010-08-13 23:10
    3樓
    實際上函數(shù)f執(zhí)行后,a=100,b=1,這就是引用符&的作用。實際上,在C語言中,&是地址符,C中的地址與指針的傳遞過程過于復(fù)雜,不作解釋以免添亂,而這也正是C++中引入引用機制的原因。
    實際上這個例題很簡單,選擇它只是為了引出結(jié)構(gòu)體和引用機制的知識點,如果還有需要解釋的地方,請告訴我!

    P10頁(1)—(11)
    (1)
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #define TRUE 1
    命令define的詳細作用請參閱C語言課本,此處只作簡單說明:
    #define TRUE 1的效果是,在預(yù)編譯的時候,程序中所有的“TRUE”都被機械的替換為1,1代表真值。(在控制臺程序中TRUE不被支持,而在windows編程中TRUE與true等同。)

    類型定義符typedef,詳細請參閱C語言課本。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef int Status;
    定義一個變量時,Status a;與int a;的效果是相同的,類型定義符typedef只是為了使用上的方便,在windows編程中你會見到大量的類型定義。

    下面請注意了,講到數(shù)據(jù)結(jié)構(gòu)嚴(yán)書中經(jīng)常會見到的結(jié)構(gòu)體定義方法。

    如下面這個使用了類型定義符的結(jié)構(gòu)體定義:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
    }Point,*lPoint;
    其核心實際上就是前面已經(jīng)講過的
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct node
    {
        int x,y;
    };
    只不過把名稱ADT換成了node。
    這里typedef的作用:
    將類型struct node{}重定義為Point;
    將類型struct node {}*重定義為lPoint;(typedef struct node{}* lPoint
    注意此處Point與lPoint的名稱不能相同,前者是結(jié)構(gòu)體名稱,后者是結(jié)構(gòu)體指針名稱。
    在此處,可以省略struct后面的結(jié)構(gòu)體名稱node,寫成如下形式:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct
    {
        int x,y;
    };
    下面是完整的程序,來描述結(jié)構(gòu)體是如何被使用的。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #include<stdio.h>
    #include<stdlib.h>

    typedef struct
    {
        int x,y;
    }Point,*lPoint;

    int main()
    {
        Point a;
        a.x=1; // e使用結(jié)構(gòu)體變量時用的是“.”
        a.y=1;
        lPoint b; // 定義結(jié)構(gòu)體指針
        b=(lPoint)malloc(sizeof(Point)); // 要給指針分配內(nèi)存
        b->x=1; // 使用指針時用的是“->”
        b->y=1;
        Point* c; // 與上面定義結(jié)構(gòu)體指針是一回事,寫法不一樣而已
        c=(Point*)malloc(sizeof(Point));
        c->x=1;
        c->y=1;
        return 0;
    }
    書中還會看到:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
        struct node* next;
    }Point,*lPoint;
    這里的node不能省略,其余不再做過多的解釋。有關(guān)指針與內(nèi)存分配的知識點,將在以后章節(jié)中講到。

    嚴(yán)書從(2)到(11)是把C語言的知識簡單帶過

    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發(fā)表于 2010-08-13 23:10
    4樓
    實際上函數(shù)f執(zhí)行后,a=100,b=1,這就是引用符&的作用。實際上,在C語言中,&是地址符,C中的地址與指針的傳遞過程過于復(fù)雜,不作解釋以免添亂,而這也正是C++中引入引用機制的原因。
    實際上這個例題很簡單,選擇它只是為了引出結(jié)構(gòu)體和引用機制的知識點,如果還有需要解釋的地方,請告訴我!

    P10頁(1)—(11)
    (1)
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #define TRUE 1
    命令define的詳細作用請參閱C語言課本,此處只作簡單說明:
    #define TRUE 1的效果是,在預(yù)編譯的時候,程序中所有的“TRUE”都被機械的替換為1,1代表真值。(在控制臺程序中TRUE不被支持,而在windows編程中TRUE與true等同。)

    類型定義符typedef,詳細請參閱C語言課本。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef int Status;
    定義一個變量時,Status a;與int a;的效果是相同的,類型定義符typedef只是為了使用上的方便,在windows編程中你會見到大量的類型定義。

    下面請注意了,講到數(shù)據(jù)結(jié)構(gòu)嚴(yán)書中經(jīng)常會見到的結(jié)構(gòu)體定義方法。

    如下面這個使用了類型定義符的結(jié)構(gòu)體定義:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
    }Point,*lPoint;
    其核心實際上就是前面已經(jīng)講過的
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct node
    {
        int x,y;
    };
    只不過把名稱ADT換成了node。
    這里typedef的作用:
    將類型struct node{}重定義為Point;
    將類型struct node {}*重定義為lPoint;(typedef struct node{}* lPoint
    注意此處Point與lPoint的名稱不能相同,前者是結(jié)構(gòu)體名稱,后者是結(jié)構(gòu)體指針名稱。
    在此處,可以省略struct后面的結(jié)構(gòu)體名稱node,寫成如下形式:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    struct
    {
        int x,y;
    };
    下面是完整的程序,來描述結(jié)構(gòu)體是如何被使用的。
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #include<stdio.h>
    #include<stdlib.h>

    typedef struct
    {
        int x,y;
    }Point,*lPoint;

    int main()
    {
        Point a;
        a.x=1; // e使用結(jié)構(gòu)體變量時用的是“.”
        a.y=1;
        lPoint b; // 定義結(jié)構(gòu)體指針
        b=(lPoint)malloc(sizeof(Point)); // 要給指針分配內(nèi)存
        b->x=1; // 使用指針時用的是“->”
        b->y=1;
        Point* c; // 與上面定義結(jié)構(gòu)體指針是一回事,寫法不一樣而已
        c=(Point*)malloc(sizeof(Point));
        c->x=1;
        c->y=1;
        return 0;
    }
    書中還會看到:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    typedef struct node
    {
        int x,y;
        struct node* next;
    }Point,*lPoint;
    這里的node不能省略,其余不再做過多的解釋。有關(guān)指針與內(nèi)存分配的知識點,將在以后章節(jié)中講到。

    嚴(yán)書從(2)到(11)是把C語言的知識簡單帶過

    分享到:
    回復(fù)話題
    上傳/修改頭像

    500加上300等于多少?

    考研論壇提示:
    1、請勿發(fā)布個人聯(lián)系方式或詢問他人聯(lián)系方式,包括QQ和手機等。
    2、未經(jīng)允許不得發(fā)布任何資料出售、招生中介等廣告信息。
    3、如果發(fā)布了涉及以上內(nèi)容的話題或跟帖,您在考研網(wǎng)的注冊賬戶可能被禁用。

    網(wǎng)站介紹 | 關(guān)于我們 | 聯(lián)系方式 | 廣告業(yè)務(wù) | 幫助信息
    ©1998-2015 ChinaKaoyan.com Network Studio. All Rights Reserved.

    中國考研網(wǎng)-聯(lián)系地址:上海市郵政信箱088-014號 郵編:200092 Tel & Fax:021 - 5589 1949 滬ICP備12018245號

    久久亚洲精品成人av无码网站| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻系列av无码一区二区 | 日韩中文字幕在线观看| 久久丝袜精品中文字幕| 欧洲Av无码放荡人妇网站| 亚洲中文字幕第一页在线| 亚洲日韩精品无码专区网址| 中文无码不卡的岛国片| 国内精品无码一区二区三区| 久久久精品人妻无码专区不卡 | 色噜噜综合亚洲av中文无码| 中文字幕乱码久久午夜| 亚洲AV无码精品色午夜果冻不卡| 中文字幕色婷婷在线视频| 无码精品人妻一区二区三区中| 午夜不卡无码中文字幕影院| 精品人妻大屁股白浆无码| 一级片无码中文字幕乱伦 | 国产精品无码一区二区在线| 亚洲精品一级无码中文字幕| 无码人妻久久一区二区三区蜜桃| 国产日韩AV免费无码一区二区| 亚洲一级特黄大片无码毛片 | 精品无码免费专区毛片| 亚洲.欧美.中文字幕在线观看| 无码中文人妻在线一区二区三区 | 最新中文字幕av无码专区| 人妻无码一区二区三区免费 | 色综合久久中文字幕综合网 | 日产无码1区2区在线观看| 亚洲成A人片在线观看无码不卡| 最近中文字幕高清字幕在线视频 | 乱人伦中文视频高清视频| 无码人妻丰满熟妇啪啪| 国产在线无码不卡影视影院 | 天堂无码在线观看| 国产在线无码一区二区三区视频| 亚洲精品中文字幕无码蜜桃| 中文字幕人妻在线视频不卡乱码| 日韩欧群交P片内射中文| 无码AV一区二区三区无码|