9 資料結構筆記之九棧的應用之行編輯實現

2021-08-08 00:20:30 字數 2484 閱讀 8582

9、資料結構筆記之九棧的應用之行編輯實現

人生照例是一場值得一搏的爭衡,然而它的獎品是拼鬥。

行編輯的功能是接受使用者從終端輸入的程式或資料。每接受乙個字元即存入使用者資料區的做法不是最恰當的。好的做法是建立乙個快取區,允許洪湖輸入出錯,並在發現有無時可以及時更正。用棧來實現這個輸入緩衝區是非常適合的。

每當從終端接受了乙個字元後先作判別,如果不是退格符也不是退行符,則將該字元壓入棧頂;如果是退格符則從棧頂去除乙個字元,如果是退行符,則將字元棧清空。

基本和之前的例子相似,可以再原始碼中檢視。

status

push(

sqstack*s

,selemtypee)

selemtype

pop(

sqstack*s

)

lineedit函式是本棧應用的核心。主要邏輯是:

輸入字元,判斷是否為eof,如果不是則判斷是否是回車,如果是eof則退出程式,如果是\n,則退出子迴圈(第二個while迴圈),如果都不是則對字元進行選擇處理,#刪除乙個字元,@刪除整行字符,其他則入棧儲存,等出現回車或者eod(ctrl+c)時候進行輸出。

void

lineedit() ;

break;//

構造空棧s

default

:push(&s,ch);

break;//

有效字元進棧

,未考慮棧滿情形 }

ch=getchar();

//從終端接收下一字元 }

while

(!stackempty(&s))

printf(

"echo:>");

while

(!stackempty(&s1))

printf(

"\n");

if(ch!=

eof)ch=getchar(); }

destorystack(&s);

destorystack(&s1); }

main只呼叫lineedit函式,最後如下圖1 所示

void

main()

#include

"stdio.h"

#include

"string.h"

#include

"stdlib.h"

#define

stack_init_size

100

#define

overflow0

#defineok1

#define

error0

typedef

intstatus;

typedef

char

selemtype;

typedef

struct

sqstack

sqstack;

//初始化棧

sqstack

s,s1;

char

ch,c;

status

initstack(

sqstack*s

)

void

destorystack(

sqstack*s

) void

clearstack(

sqstack*s

)//棧的清空

status

stackempty(

sqstack*s

)//判斷棧是否為空

intstacklength(

sqstacks)

status

gettop(

sqstacks,

selemtypee)

//gettop  

status

push(

sqstack*s

,selemtypee)

selemtype

pop(

sqstack*s

) void

lineedit() ;

break;//

構造空棧s

default

:push(&s,ch);

break;//

有效字元進棧

,未考慮棧滿情形 }

ch=getchar();

//從終端接收下一字元 }

while

(!stackempty(&s))

printf(

"echo:>");

while

(!stackempty(&s1))

printf(

"\n");

if(ch!=

eof)ch=getchar(); }

destorystack(&s);

destorystack(&s1); }

void

main()

資料結構之 棧的應用

前面幾篇寫的都是資料結構原理性內容,也在寫棧的時候提到了棧的應用場景很欠缺,所以這兩天把棧的幾個應用寫一寫,貼出來以後查閱方便。棧的幾個典型應用例子包括 1 漢諾塔問題 2 括號匹配問題 3 迷宮老鼠問題 4 電路防交叉的佈線問題 接近括號匹配 5 就是這個部落格貼出來的車廂重排問題 其實是乙個排序...

資料結構 棧的應用之表示式求值

任何乙個表示式都是由運算元 運算子和界限符組成的,我們稱它們為單詞。一般地,運算元既可以是常數也可以是被說明為變數或常量的識別符號 運算子可以分為算術運算子 關係運算子和邏輯運算子 基本界限符由左右括號和表示式結束符等。此處,我們討論簡單算術表示式的求值問題,這種表示式只含加 減 乘 除四種運算子以...

資料結構之棧的應用舉例

第乙個問題 對於括號匹配,我們可以使用棧進行實現,利用好棧的定義 先進後出,後進先出。因此,我們可以通過每次將每個字元 若存在,則判斷檢測的該字元相對應的那個字元是否為棧頂元素,若為棧頂元素,則將其推出,若不為棧頂元素,則繼續,直到最後,若棧空,則這一行字串是滿足括號匹配的,反之。如下 在這裡插入 ...