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 就是這個部落格貼出來的車廂重排問題 其實是乙個排序...
資料結構 棧的應用之表示式求值
任何乙個表示式都是由運算元 運算子和界限符組成的,我們稱它們為單詞。一般地,運算元既可以是常數也可以是被說明為變數或常量的識別符號 運算子可以分為算術運算子 關係運算子和邏輯運算子 基本界限符由左右括號和表示式結束符等。此處,我們討論簡單算術表示式的求值問題,這種表示式只含加 減 乘 除四種運算子以...
資料結構之棧的應用舉例
第乙個問題 對於括號匹配,我們可以使用棧進行實現,利用好棧的定義 先進後出,後進先出。因此,我們可以通過每次將每個字元 若存在,則判斷檢測的該字元相對應的那個字元是否為棧頂元素,若為棧頂元素,則將其推出,若不為棧頂元素,則繼續,直到最後,若棧空,則這一行字串是滿足括號匹配的,反之。如下 在這裡插入 ...