本帖最后由 老刘1号 于 2020-4-29 11:24 编辑
介绍
让你在批处理编程中优雅的使用线性结构。
代码&文档
约定:
<必选参数> [可选参数]
默认传入变量名,有?包裹代表可传入数值、可传入变量名。
返回值在!ErrorLevel!,默认0为成功,其它为失败。
LinearList_LSS_SLL.txt
库名:线性表
实现:
链式储存结构-单向链表(含头结点)。
(Linked Storage Structure - Singly Linked List)
结点字段:
Data 储存结点的数据。
Next 指向结点对应的下一个结点。
用法:Call LinearList_LSS_SLL 函数名 参数
函数:
:Init <ListName>
建立空的线性表。
返回后,变量ListName即为头指针,头指针指向头结点。
:Clear <?ListName?>
清空线性表。
elete <ListName>
删除线性表。
变量ListName也会被删除。
:IsEmpty <?ListName?>
判断线性表是否为空表。
:GetLength <?ListName?>
返回线性表的元素个数(不计头结点)。
:GetNextNodePtr <?NodePtr?>
返回下一个结点的指针,0表示不存在下个结点。
:InsertNextNode <?NodePtr?> <VarToInsert>
在当前指针指向结点后插入新结点。
将返回新结点的指针。
:DeleteNextNode <?NodePtr?> [VarToSaveNextNodeElemValue]
删除指针指向结点的后一结点,可以返回后一结点的值。
:GetNodeElem <?NodePtr?> <VarToSaveElemValue>
得到指针指向结点的值。
:EditNodeElem <?NodePtr?> <VarToReplaceElemValue>
修改指针指向结点的值。
LinearList_LSS_SLL.bat复制代码 LinearList_SSS.txt
库名:线性表
实现:
顺序储存结构
(Sequence Storage Structure)
用法:Call LinearList_SSS 函数名 参数
函数:
:Init <ListName> <?MaxLength?>
初始化操作,建立一个空的线性表。
表最多可储存MaxLength个元素。
:Clear <ListName>
清空线性表。
:Delete <ListName>
删除线性表。
:GetElem <ListName> <?Index?> <VarToReturn>
将线性表中第Index(从1开始)个元素的值返回。
:EditElem <ListName> <?Index?> <VarToReplaceWith>
修改线性表中第Index个位置的元素值。
LinearList_SSS.bat- ::Code by OldLiu
- ::老刘编写
-
- ::Start
- Set "_TMP_Arguments_=%*"
- If "!_TMP_Arguments_:~,1!" Equ ":" (
- Set "_TMP_Arguments_=!_TMP_Arguments_:~1!"
- )
- Call :LinearList_SSS_!_TMP_Arguments_!
- Set _TMP_Arguments_=
- Goto :Eof
-
- ::LinearList_SSS Begin
- :LinearList_SSS_Init ListName MaxLength
- Set /A "%~1.MaxLength=%~2"
- Set /A ErrorLevel=0
- Goto :Eof
-
- :LinearList_SSS_Clear ListName
- For /L %%a In (1 1 !%~1.MaxLength!) Do (
- Set "%~1.Element[%%a]="
- )
- Set /A ErrorLevel=0
- Goto :Eof
-
- :LinearList_SSS_Delete ListName
- Call :LinearList_SSS_Clear "%~1"
- Set "%~1.MaxLength="
- Set /A ErrorLevel=0
- Goto :Eof
-
- :LinearList_SSS_GetElem ListName Index VarToReturn
- Set /A _LinearList_SSS_GetElem_TMP_Index=%~2
- If !_LinearList_SSS_GetElem_TMP_Index! Lss 1 (Set /A ErrorLevel=1 & Goto :Eof)
- If !_LinearList_SSS_GetElem_TMP_Index! Gtr !%~1.MaxLength! (Set /A ErrorLevel=1 & Goto :Eof)
- Call Set "%~3=%%%~1.Element[!_LinearList_SSS_GetElem_TMP_Index!]%%"
- Set _LinearList_SSS_GetElem_TMP_Index=
- Set /A ErrorLevel=0
- Goto :Eof
-
- :LinearList_SSS_EditElem ListName Index VarToReplaceWith
- Set /A _LinearList_SSS_EditElem_TMP_Index=%~2
- If !_LinearList_SSS_EditElem_TMP_Index! Lss 1 (Set /A ErrorLevel=1 & Goto :Eof)
- If !_LinearList_SSS_EditElem_TMP_Index! Gtr !%~1.MaxLength! (Set /A ErrorLevel=1 & Goto :Eof)
- Set "%~1.Element[!_LinearList_SSS_EditElem_TMP_Index!]=!%~3!"
- Set _LinearList_SSS_EditElem_TMP_Index=
- Set /A ErrorLevel=0
- Goto :Eof
- ::LinearList_SSS End
复制代码 Queue_LSS.txt
库名:队列
实现:
链式储存结构-单向链表(含头结点)。
(Linked Storage Structure - Singly Linked List)
用法:Call Queue_LSS 函数名 参数
函数:
:Init <QueueName>
建立空的队列。
:Clear <?QueueName?>
清空队列。
:Delete <QueueName>
删除队列。
变量QueueName也会被删除。
:IsEmpty <?QueueName?>
判断队列是否为空。
:Enqueue <?QueueName?> <VarToInsert>
将VarToInsert插入队列。
:Dequeue <?QueueName?> [VarToReturn]
将队头数据元素从队列中删除并返回。
eep <?QueueName?> <VarToReturn>
返回队头元素但不删除。
Queue_LSS.BAT复制代码 Stack_LSS.txt
库名:堆栈
实现:
链式储存结构-单向链表(含头结点)。
(Linked Storage Structure - Singly Linked List)
头结点的Next指向栈顶结点。
结点字段:
Data 储存结点的数据。
Next 指向结点对应的下一个结点。
用法:Call Stack_LSS 函数名 参数
函数:
:Init <StackName>
初始化操作,建立一个空的堆栈。
:Clear <?StackName?>
清空堆栈。
:Delete <StackName>
删除堆栈。
:IsEmpty <?StackName?>
判断堆栈是否为空。
:GetLength <?StackName?>
ErrorLevel返回堆栈中的元素个数。
:Push <?StackName?> <VarToPush>
变量入栈。
:Pop <?StackName?> <VarToReturn>
变量出栈。
:GetTopElem <?StackName?> <VarToReturn>
得到栈顶元素。
:EditTopElem <?StackName?> <VarToReplaceWith>
修改栈顶元素。
Stack_LSS.bat复制代码 Stack_SSS.txt
库名:堆栈
实现:
顺序储存结构
(Sequence Storage Structure)
用法:Call Stack_SSS 函数名 参数
函数:
:Init <StackName> <?MaxLength?>
初始化操作,建立一个空的堆栈。
堆栈最多可储存MaxLength个元素。
:Clear <StackName>
清空堆栈。
:Delete <StackName>
删除堆栈。
:IsEmpty <StackName>
判断堆栈是否为空。
:IsFull <StackName>
判断堆栈是否已满。
:GetLength <StackName>
ErrorLevel返回堆栈中的元素个数。
:Push <StackName> <VarToPush>
变量入栈。
:Pop <StackName> <VarToReturn>
变量出栈。
:GetTopElem <StackName> <VarToReturn>
得到栈顶元素。
:EditTopElem <StackName> <VarToReplaceWith>
修改栈顶元素。
Stack_SSS.bat复制代码 算法实例
堆栈应用:批处理版逆波兰四则计算器
单向循环链表应用:约瑟夫问题
快慢指针:腾讯面试题-寻找单链表的中间节点
队列应用:一元多项式相加算法 |