亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 鏈表.txt

?? delphi編寫的堆棧功能。代碼簡練合理
?? TXT
字號:
unit TStack;

interface

type
 PStackRec=^TStackRec;
 TStackRec=record
   Data:char;
   Next:PStackRec;
   Prev:pStackRec;
 end;

 TStack=class
 private
   pHead:PStackRec;
 protected
   procedure FreeAllNode;
 public
   constructor Create;
   destructor Destroy; override;
   function IsEmpty:boolean;
   function GetData(var a_ch:char):boolean;
   function PopData(var a_ch:char):boolean;
   function PushData(a_ch:char):boolean;

 end;

implementation

{TStack}

constructor TStack.Create;
begin
 GetMem(pHead,SizeOf(TStackRec));
 pHead^.Next:=pHead;
 pHead^.Prev:=pHead;
 inherited;
end;

procedure TStack.FreeAllNode;
var
 pNode:pStackRec;
begin
 while pHead^.Next<>pHead do
 begin
 pNode:=pHead^.Next;
 pHead^.Next:=pNode^.Next;
 FreeMem(pNode);
 end;
 pHead^.Next:=pHead;
 pHead^.Prev:=pHead;
end;

destructor TStack.Destroy;
begin
 FreeAllNode;
 FreeMem(pHead);
 inherited;
end;

function TStack.IsEmpty:boolean;
begin
 Result:=False;
 if pHead^.Next=pHead then
 Result:=True;
end;

function TStack.GetData(var a_ch:char):boolean;
begin
 if not IsEmpty then
 begin
 a_ch:=pHead^.Prev^.Data;
 Result:=True;
 end
 else
 begin
 Result:=False;
 end;
end;

function TStack.PopData(var a_ch:char):boolean;
var
 pTemp:pStackRec;
begin
 if not IsEmpty then
 begin
 pTemp:=pHead^.Prev;
 a_ch:=pTemp^.Data;
 pHead^.Prev:=pTemp^.Prev;
 pTemp^.Prev^.Next:=pHead;
 FreeMem(pTemp);
 Result:=True;
 end
 else
 Result:=False;
end;

function TStack.PushData(a_ch:char):boolean;
var
 pTemp:pStackRec;
begin
 GetMem(pTemp,SizeOf(TStackRec));
 pTemp^.Data:=a_ch;
 pTemp^.Next:=pHead;
 pTemp^.Prev:=pHead^.Prev;
 pHead^.Prev^.Next:=pTemp;
 pHead^.Prev:=pTemp;
 Result:=True;
end;
end.
=========================================
在delphi中怎樣定義鏈表?
type
? PLink=^LinkData;
? LinkData=record
? Key:KeyType;
? Data:DataType;
? Next:PLink;
? end;
TList就是一個鏈表
=======================================
淺談Object Pascal的指針

    Nicrosoft(nicrosoft@sunistudio.com) 2001.8.26 
    (http://www.sunistudio.com/nicrosoft/)

    大家都認為,C語言之所以強大,以及其自由性,很大部分體現在其靈活的指針運用上。因此,說指針是C語言的靈魂,一點都不為過。同時,這種說法也讓很多人產生誤解,似乎只有C語言的指針才能算指針。Basic不支持指針,在此不論。其實,Pascal語言本身也是支持指針的。從最初的Pascal發展至今的Object Pascal,可以說在指針運用上,絲毫不會遜色于C語言的指針。

    以下內容分為八部分,分別是
    一、類型指針的定義
    二、無類型指針的定義
    三、指針的解除引用
    四、取地址(指針賦值)
    五、指針運算
    六、動態內存分配
    七、字符數組的運算
    八、函數指針


    一、類型指針的定義。對于指向特定類型的指針,在C中是這樣定義的:
        int *ptr;
        char *ptr;
        與之等價的Object Pascal是如何定義的呢? 
        var
        ptr : ^Integer;
        ptr : ^char; 
        其實也就是符號的差別而已。

    二、無類型指針的定義。C中有void *類型,也就是可以指向任何類型數據的指針。Object Pascal為其定義了一個專門的類型:Pointer。于是,
        ptr : Pointer;
        就與C中的
        void *ptr;
        等價了。

    三、指針的解除引用。要解除指針引用(即取出指針所指區域的值),C 的語法是 (*ptr),Object Pascal則是 ptr^。

    四、取地址(指針賦值)。取某對象的地址并將其賦值給指針變量,C 的語法是
        ptr = &Object;
        Object Pascal 則是
        ptr := @Object;
        也只是符號的差別而已。

    五、指針運算。在C中,可以對指針進行移動的運算,如:
        char a[20];  
        char *ptr=a;  
        ptr++;
        ptr+=2;
        當執行ptr++;時,編譯器會產生讓ptr前進sizeof(char)步長的代碼,之后,ptr將指向a[1]。ptr+=2;這句使得ptr前進兩個sizeof(char)大小的步長。同樣,我們來看一下Object Pascal中如何實現:
        var
            a : array [1..20] of Char;
            ptr : PChar; //PChar 可以看作 ^Char
        begin
            ptr := @a;
            Inc(ptr); // 這句等價于 C 的 ptr++;
            Inc(ptr, 2); //這句等價于 C 的 ptr+=2;
        end;
        只是,Pascal中,只允許對有類型的指針進行這樣的運算,對于無類型指針是不行的。

    六、動態內存分配。C中,使用malloc()庫函數分配內存,free()函數釋放內存。如這樣的代碼:
        int *ptr, *ptr2;
        int i;
        ptr = (int*) malloc(sizeof(int) * 20);
        ptr2 = ptr;
        for (i=0; i<20; i++){
            *ptr = i;
            ptr++;
        }
        free(ptr2);
        Object Pascal中,動態分配內存的函數是GetMem(),與之對應的釋放函數為FreeMem()(傳統Pascal中獲取內存的函數是New()和 Dispose(),但New()只能獲得對象的單個實體的內存大小,無法取得連續的存放多個對象的內存塊)。因此,與上面那段C的代碼等價的Object Pascal的代碼為:
        var ptr, ptr2 : ^integer;
            i : integer;
        begin
            GetMem(ptr, sizeof(integer) * 20); 
                //這句等價于C的 ptr = (int*) malloc(sizeof(int) * 20);
            ptr2 := ptr; //保留原始指針位置
            for i := 0 to 19 do
            begin
                ptr^ := i;
                Inc(ptr);
            end;
            FreeMem(ptr2);
        end;
        對于以上這個例子(無論是C版本的,還是Object Pascal版本的),都要注意一個問題,就是分配內存的單位是字節(BYTE),因此在使用GetMem時,其第二個參數如果想當然的寫成 20,那么就會出問題了(內存訪問越界)。因為GetMem(ptr, 20);實際只分配了20個字節的內存空間,而一個整形的大小是四個字節,那么訪問第五個之后的所有元素都是非法的了(對于malloc()的參數同樣)。

    七、字符數組的運算。C語言中,是沒有字符串類型的,因此,字符串都是用字符數組來實現,于是也有一套str打頭的庫函數以進行字符數組的運算,如以下代碼:
        char str[15];
        char *pstr;
        strcpy(str, "teststr");
        strcat(str, "_testok");
        pstr = (char*) malloc(sizeof(char) * 15);
        strcpy(pstr, str);
        printf(pstr);
        free(pstr);
        而在Object Pascal中,有了String類型,因此可以很方便的對字符串進行各種運算。但是,有時我們的Pascal代碼需要與C的代碼交互(比如:用Object Pascal的代碼調用C寫的DLL或者用Object Pascal寫的DLL準備允許用C寫客戶端的代碼)的話,就不能使用String類型了,而必須使用兩種語言通用的字符數組。其實,Object Pascal提供了完全相似C的一整套字符數組的運算函數,以上那段代碼的Object Pascal版本是這樣的:
        var str : array [1..15] of char;
            pstr : PChar; //Pchar 也就是 ^Char
        begin
            StrCopy(@str, 'teststr'); //在C中,數組的名稱可以直接作為數組首地址指針來用
                                      //但Pascal不是這樣的,因此 str前要加上取地址的運算符
            StrCat(@str, '_testok');
            GetMem(pstr, sizeof(char) * 15);
            StrCopy(pstr, @str);
            Write(pstr);
            FreeMem(pstr);
        end;

    八、函數指針。在動態調用DLL中的函數時,就會用到函數指針。假設用C寫的一段代碼如下:
        typedef int (*PVFN)(int); //定義函數指針類型
        int main()
        {
            HMODULE hModule = LoadLibrary("test.dll");
	    PVFN pvfn = NULL;
            pvfn = (PVFN) GetProcAddress(hModule, "Function1");
            pvfn(2);
            FreeLibrary(hModule);
        }
        就我個人感覺來說,C語言中定義函數指針類型的typedef代碼的語法有些晦澀,而同樣的代碼在Object Pascal中卻非常易懂:
        type PVFN = Function (para : Integer) : Integer;
        var
            fn : PVFN; 
                //也可以直接在此處定義,如:fn : function (para:Integer):Integer;
            hm : HMODULE;
        begin
            hm := LoadLibrary('test.dll');
            fn := GetProcAddress(hm, 'Function1');
            fn(2);
            FreeLibrary(hm);
        end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产自产拍高清av王其 | 91福利视频网站| 欧美久久久久久久久久| 国产亚洲综合在线| 午夜一区二区三区视频| 狠狠网亚洲精品| 欧美在线免费视屏| 亚洲欧美在线高清| 国模一区二区三区白浆| 欧美一区二区美女| 一卡二卡三卡日韩欧美| 国产福利精品导航| 日韩天堂在线观看| 亚洲第一福利视频在线| 91丨porny丨在线| 欧美韩国日本不卡| 国产一区在线观看视频| 6080日韩午夜伦伦午夜伦| 亚洲天堂精品视频| 懂色av一区二区三区免费看| 日韩欧美国产一区二区三区 | 精品一区二区三区视频在线观看| 91在线观看高清| 久久国产三级精品| 中文字幕中文在线不卡住| 国产高清亚洲一区| 麻豆精品一区二区av白丝在线| 亚洲制服丝袜在线| 亚洲一区在线免费观看| 亚洲精品在线电影| 久久综合色婷婷| 久久先锋影音av| 欧美日韩夫妻久久| 欧美日韩精品欧美日韩精品| youjizz国产精品| 狠狠色丁香久久婷婷综| 精品久久久久久最新网址| 91网站黄www| 波多野结衣精品在线| 风间由美中文字幕在线看视频国产欧美| 久久精品男人天堂av| 99re亚洲国产精品| 激情六月婷婷久久| 日韩精品在线网站| 欧美一区二区三区视频在线观看| 奇米影视一区二区三区小说| 亚洲欧美色图小说| 欧美一级高清片在线观看| 在线观看网站黄不卡| 日韩一级在线观看| 欧美精品久久一区二区三区| 欧美男女性生活在线直播观看| 99久久99久久综合| 欧美午夜视频网站| 久久青草欧美一区二区三区| 国产精品大尺度| 日韩精品自拍偷拍| 精品一区二区三区欧美| 成人综合婷婷国产精品久久蜜臀 | 亚洲久本草在线中文字幕| 成人av中文字幕| 一区二区三区在线看| 欧美男生操女生| 国产盗摄视频一区二区三区| 亚洲色图视频免费播放| 波多野结衣在线aⅴ中文字幕不卡| 国产日韩视频一区二区三区| 一区二区三区精品久久久| 欧美日韩激情在线| 国产成人高清视频| 亚洲一区二区三区自拍| 欧美不卡一二三| 欧美日韩成人综合| 国产福利不卡视频| 亚洲综合久久久| 久久精品一区二区三区不卡| 欧美性感一类影片在线播放| 国内精品久久久久影院薰衣草| 亚洲三级在线免费观看| 日韩三级中文字幕| 色欧美乱欧美15图片| 极品瑜伽女神91| 天天综合色天天| 中文字幕在线观看不卡| 欧美一区二区视频在线观看2022| 成人激情校园春色| 国产乱码一区二区三区| 亚洲成人午夜影院| 中文字幕一区二区三区不卡| 欧美成人性福生活免费看| 94色蜜桃网一区二区三区| 国模套图日韩精品一区二区 | 欧美伊人久久大香线蕉综合69| 精品无人区卡一卡二卡三乱码免费卡| 亚洲免费观看高清完整版在线| 久久综合成人精品亚洲另类欧美 | 在线看国产一区| 白白色 亚洲乱淫| 韩国av一区二区三区四区| 午夜影院久久久| 一区二区在线看| 亚洲色图视频免费播放| 国产精品久久久一本精品| 久久只精品国产| 精品久久久影院| 日韩一区二区三区四区五区六区| 91色视频在线| 色婷婷av一区二区| 99精品热视频| av在线播放不卡| 99久久久精品免费观看国产蜜| 韩国av一区二区三区四区| 麻豆国产精品777777在线| 日本成人超碰在线观看| 婷婷综合五月天| 蜜臀精品一区二区三区在线观看| 亚洲午夜三级在线| 亚洲午夜羞羞片| 日韩成人午夜精品| 狂野欧美性猛交blacked| 日本不卡视频一二三区| 久久精品一区二区三区不卡牛牛 | 7799精品视频| 欧美午夜电影网| 欧美精品欧美精品系列| 日韩亚洲欧美高清| 久久综合色8888| 欧美激情综合在线| 国产欧美日韩三区| 国产精品对白交换视频| 亚洲精品日韩专区silk| 亚洲小说欧美激情另类| 国产另类ts人妖一区二区| 国产酒店精品激情| 99精品视频一区| 欧美日韩国产123区| 午夜av电影一区| 色婷婷综合久久久中文字幕| 亚洲高清免费视频| 日韩激情一区二区| 精品一区二区免费在线观看| 国产成人精品三级麻豆| 成人av午夜影院| 色成年激情久久综合| 日韩欧美综合一区| 国产欧美日韩三级| 一区二区三区加勒比av| 日本在线播放一区二区三区| 国产一区在线看| 欧美三级视频在线观看| 欧美精品一区二区三区在线播放| 中日韩免费视频中文字幕| 一二三区精品视频| 国产一区在线观看视频| 91麻豆免费在线观看| 日韩精品一区二区三区在线播放| 亚洲国产精品传媒在线观看| 亚洲一区在线观看视频| 精一区二区三区| 97精品久久久午夜一区二区三区| 欧美日韩免费电影| 国产日产欧美一区| 欧美a级理论片| 色婷婷av一区二区三区gif | 午夜精品久久一牛影视| 高清国产一区二区三区| 91麻豆精品国产91久久久更新时间| 精品成人一区二区三区四区| 一区二区三区在线看| 成人性生交大片免费| 欧美电影免费观看高清完整版在线| 中文字幕不卡在线观看| 麻豆成人av在线| 在线观看国产一区二区| 国产女人18水真多18精品一级做| 婷婷六月综合网| 91福利在线观看| 中文字幕中文字幕中文字幕亚洲无线| 毛片不卡一区二区| 欧美日本在线观看| 亚洲欧美区自拍先锋| 福利视频网站一区二区三区| 日韩一区二区三区三四区视频在线观看 | 日本少妇一区二区| 91美女视频网站| 欧美激情中文不卡| 国产又黄又大久久| 精品国产乱码久久久久久图片| 美女一区二区久久| 在线不卡a资源高清| 亚洲一区二区在线观看视频| 99久久精品久久久久久清纯| 国产日韩欧美一区二区三区乱码| 久久精品国产一区二区| 日韩一区二区在线看片| 丝袜国产日韩另类美女| 欧美日本一区二区| 丝袜亚洲另类欧美综合| 欧美无人高清视频在线观看| 一区二区在线观看av|