欧美在线观看一区,免费看日产一区二区三区,欧美一区二区三区在线,精品1区2区3区,亚洲国产一成人久久精品,久久国产精品最新一区

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

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

P9頁例1-6

在C語言中,最簡單的結構體是這樣的:
復制內容到剪貼板
代碼:
struct ADT
{
    int x,y;
};
其中ADT是結構的名稱,x和y是結構體的數據成員,注意{}后面的分號,這個是不能忘掉的。
現在添加一個成員函數(這實際上是C++的內容),即數據結構中所謂的基本操作,如下:
復制內容到剪貼板
代碼:
struct ADT
{
    int x,y;
    void x_dayu_y()
    {
        if(x>y)
            printf("x>y
");
        else
            printf("x<=y
");
    };
};
關于函數和if..else…語句的知識請參閱C語言課本,這個不用解釋的吧。下面給出完整的程序,來描述這個結構是如何被使用的。當我說到“完整的程序”的時候,你完全可以在VC++6.0上來運行它。
復制內容到剪貼板
代碼:
#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; // 定義一個結構體變量,請區別:結構體變量adt的類型是結構體ADT
    adt.x=1; // 賦值
    adt.y=2;
    adt.x_dayu_y(); // 基本操作
    return 0;
}
結構體的知識暫時介紹這些,對于理解例1-6的結構已經夠用了。
在此強調一點,嚴書上的程序都是偽代碼描述,完全COPY到程序里是肯定不能執行的。
復制內容到剪貼板
代碼:
ADT Triplet
{
    InitTriplet(&T,v1,v2,v3)
    ……
}ADT Triplet
ADT Triplet可以理解為結構體名稱,ADT即為書中前文提到的Abstract Data Type,而Triplet即為三元組,函數InitTriplet(&T,v1,v2,v3),此外偽代碼并未指明返回值,需要解釋一下的是符號&的含義,&在C++中表示引用,完整的程序如下:
復制內容到剪貼板
代碼:
#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
  • 注冊于:
發表于
沙發
實際上函數f執行后,a=100,b=1,這就是引用符&的作用。實際上,在C語言中,&是地址符,C中的地址與指針的傳遞過程過于復雜,不作解釋以免添亂,而這也正是C++中引入引用機制的原因。
實際上這個例題很簡單,選擇它只是為了引出結構體和引用機制的知識點,如果還有需要解釋的地方,請告訴我!

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

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

下面請注意了,講到數據結構嚴書中經常會見到的結構體定義方法。

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

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

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

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

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

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

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

下面請注意了,講到數據結構嚴書中經常會見到的結構體定義方法。

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

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

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

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

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

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

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

下面請注意了,講到數據結構嚴書中經常會見到的結構體定義方法。

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

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

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

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

分享到:
回復話題
上傳/修改頭像

中秋節中國人一般會吃什么?

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

網站介紹 | 關于我們 | 聯系方式 | 廣告業務 | 幫助信息
©1998-2015 ChinaKaoyan.com Network Studio. All Rights Reserved.

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