注册 登录
编程论坛 C++教室

刚学数据结构,有段代码看不懂 求破 。。。

Cai_xw1993 发布于 2014-05-25 20:05, 907 次点击
刚自己学数据结构,看到这样一段代码,蒙了,求解释下
程序代码:
const maxzise = 顺序表的容量;
typedef struct
{datatype data[maxsize];

 int last;
}sqlist;
sqlist L;
13 回复
#2
funyh2502014-05-25 22:16
定义了一个sqlist的 结构体  和 实例L
#3
yangfrancis2014-05-25 22:34
不懂,也来学习学习。
#4
Cai_xw19932014-05-26 21:26
回复 2 楼 funyh250
意思是否: L为结构体sqlist的对象? 请问除了sqlist之外还有其他结构体吗? 还有 typedef struct  为什么这里不用函数名?
#5
TonyDeng2014-05-26 21:34
typedef是C的語法,它定義一個結構(typedef struct直譯即可)作爲某種數據類型(C的自定義數據類型能力就體現在這裏),後面的花括號就是這種數據類型的具體結構,然後給這種數據類型起一個名稱,命名爲sqlist,類似int這種名稱即是這樣來的。然後在下一行,就使用這種數據名稱聲明一個數據變量。你把sqlist當作int、double這類東西看就是了。

在C++,是不需要使用typedef字眼的,直接定義一個命名的struct或class,就已經是數據類型了。
#6
Cai_xw19932014-05-26 22:01
回复 5 楼 TonyDeng
还是不太能理解,不过好像又懂了些什么,我说下我理解的,麻烦看有什么地方时错误的。
因为我现在学的是C的数据结构。
typedef struct
{datatype data[maxsize];
int last;
}sqlist;
这是定义了一个sqlist的数据结构。
这里的sqlist是一个标示符还是关键字(因为表示如果是标示符的话就能自定义的,而关键字是不能改的)
然后 sqlist L;意思是定义的一个sqlist类型的L   是这样子理解吗?
就像int a; 一样,定义一个int 类型的 对象a;
最后typedef  在C里面是一定要的吗?
然后如果在C++里面就不用?
#7
TonyDeng2014-05-26 22:15
是的。嚴格地說,這叫定義一個“類型”,如果你看國外的教科書,裏面經常提到的類型(type),就是這種東西了,不管是内置的原始數據類型,還是自定義的struct/class,都統一叫類型。typedef,是type define的縮連寫,即類型定義。sqlist是類型的名字,是標識符(其實int、float、double等也是標識符,不是關鍵字,不過標準宣佈它們是關鍵字罷了)。在實際的編程中,標識符和關鍵字,其實不用區分得太嚴格,因爲對C/C++這種以能自創數據類型爲榮的語言來説,類型一旦定義,就如固有的類型處於同等地位(在C#中,更是把内置數據類型也封包爲對象類型),無非是内置與否的區別。在VS的IDE代碼編輯器中,我們可以看到定義類型之後,在往後的代碼中,這種類型的顔色與内置數據類型是一樣的,都是綠色。

[ 本帖最后由 TonyDeng 于 2014-5-26 22:23 编辑 ]
#8
Cai_xw19932014-05-26 22:21
回复 6 楼 Cai_xw1993
#9
Cai_xw19932014-05-26 22:22
回复 7 楼 TonyDeng
今晚学到了不少东西,谢谢你的解答,自学有时候就是不知道到底懂得是否是正确的。经过你一番解说,感觉明白了很多东西。以后可能很多不懂,希望不吝赐教!
#10
TonyDeng2014-05-26 22:42
其實C,本身是很小的,它連基本的輸入輸出功能都沒有,諸如標準庫這樣的東西,是前人替我們定義好一大堆常用的類型、寫好一大堆常用的函數(其中包括必需的輸入輸出函數,這也是C庫針對同一需求往往提供有多種解決函數的原因),這些東西,被收錄到標準庫中,就成了所謂的標準,教材也把這種別人擴充寫出來的東西當成是C語言内置的知識來講,才把C語言弄得神秘兮兮、高深莫測。正如《老子》說的,萬物生於無,最小的東西才是最玄妙的,一百來種基本元素構成宇宙無窮無盡的物質,龐大的幾何學誕生於寥寥幾條公理,就是這種原理的體現。C語言正因爲本身很小,才能被擴充爲最複雜的體系,才有最充分的自由度,我們學的時候,不要被那些人家擴充過的東西牽著走,最關鍵是學會如何用最基本的東西逐漸構造複雜的東西,那樣你才是真正自由的。自造和擴充數據類型,就是那些偉大的公理之一,不要被int、float、double等束縛住,把它們視爲一體,看待事物的眼光自然擴闊許多,到你隨心所欲地通過構造數據類型來描述事物的時候,就得道了。
#11
TonyDeng2014-05-26 22:49
學數據結構,不是死摳課程上講到的那些結構,什麽鏈表、隊列、棧、樹等等,那些衹是描述某種常見行爲的類型模板而已,更重要的是,要學會在遇到現實問題的時候,如何構造適用的數據類型來描述它,不是世界上所有的數據類型都被鏈表、隊列、棧、樹描述了,以爲把那些東西玩熟了就叫懂數據結構。還有很多未知的、更有針對性的數據類型需要我們去構造。
#12
Cai_xw19932014-05-27 23:50
回复 10 楼 TonyDeng
那归根究底,C好像就是没什么的。假如全部都是前人所写的函数,那C还剩下什么呢~,一些前人规定下来的规矩罢了。至于怎么扩展,可以随心所欲,任由心生?一切无中生有而已~
#13
TonyDeng2014-05-28 00:13
C本來就沒多少東西。正如圍棋,規則少,子的種類少,但卻比任何棋類都複雜。
#14
Cai_xw19932014-05-28 00:16
回复 13 楼 TonyDeng
哈哈,你说的东西总有一言惊醒梦中人的感觉。每一句话都包含千言万语,每一次看总能领悟点东西出来,灵感的来源!
1