DS之順序棧和鏈隊實現回文判斷

2021-12-30 04:54:34 字數 2620 閱讀 6083

順序棧和鏈隊的基本操作就不再一一枚舉了,要想實現回文判斷,先來了解什麼是回文?「回文」一字串正著讀和反著讀是相同的字串行,如「abcba」,"abba"為"回文",「abab」則不是「回文」。

其次就是順序棧和鏈隊如何實現回文的判斷?將輸入的字串依次入棧和入隊,然後再依次出棧和出隊,由於入棧和入隊是相同的序列,然而出棧和出隊是相反的序列,這就實現了回文的判斷。

最後考慮要用到順序棧和鏈隊的什麼基本操作?需要用到棧的基本操作為;1構造乙個空棧,2判斷棧是否為空,7出棧,8進棧。需要用到鏈隊的基本操作為:1初始化鏈隊,7出隊,8入隊。

實現判斷回文的函式**為:

status huiwen(sqstack &s,linkqueue &q)//判斷回文的函式

while(!stackempty(s))

if(a!=b)

else

}在主函式中只需構建乙個順序棧和鏈隊,再定義乙個接受輸入的字串,基本上就實現了回文的判斷,輸入乙個以「@」結束的字串,回文判斷的**為:

#include

using namespace std;

//兩個c語言的標頭檔案庫

#include

#include

//以下是巨集定義

#define ok 1

#define errow 0

#define overflow -2

#define true 1

#define false 0

#define infeasible -1

#define stack_init_size 100//儲存空間初始分配量

#define stackincrement 10//儲存空間分配增量

//以下是型別重新定義

typedef char selemtype;//重新定義selemtype為int型

typedef int status;//重新定義status為int型

typedef char qelemtype;//重新定義qelemtype為int型

//下面的是棧的定義和基本操作

typedef structsqstack;

typedef struct qnodeqnode, *queueptr;

typedef struct linkqueue;//定義的乙個結構變數

//1初始化佇列

status initqueue(linkqueue &q)

q.front->next=null;

return ok;

}//入佇列

status enqueue(linkqueue &q,qelemtype e)

p->data=e;

p->next=null;

q.rear->next=p;

q.rear=p;

return ok;

}//出佇列

status dequeue(linkqueue &q,qelemtype &e)

queueptr p=(queueptr)malloc(sizeof(qnode));

p=q.front->next;

e=p->data;

q.front->next=p->next;

if(q.rear==p)

free(p);

return ok;

}//1構造乙個空棧

status initstack(sqstack &s)

s.top=s.base;

s.stacksize=stack_init_size;

return ok;

}//2判斷棧是否為空

status stackempty(sqstack s)

else }

//7出棧

status pop(sqstack &s,selemtype &e)

e=*--s.top;

return ok;

}//8進棧

status push(sqstack &s,selemtype e)

s.base=newbase;

s.top=s.base+s.stacksize;

s.stacksize+=stackincrement;

} *s.top++=e;

return ok;

}status huiwen(sqstack &s,linkqueue &q)

while(!stackempty(s))

if(a!=b)

else

} int main()

{ sqstack s;//

linkqueue q;

initstack(s);

initqueue(q);

char *array1=new char[100];

cout<

輸入的字串為:abcba@

輸出的結果為:

輸入的字串為:abcde@

輸出的結果為:

順序棧 鏈棧 順序隊和鏈隊小結

順序棧和順序隊的儲存結構都為順序儲存,鏈棧和鏈隊的儲存結構為鏈式儲存。順序棧和順序隊為受約束的順序表 可以看成與陣列類似 鏈棧和鏈隊和單鏈表沒有什麼區別。如何寫出這些相應的程式 呢?本人認為有以下幾點 1 清楚順序棧 順序隊 鏈棧和鏈隊的結構及其基本性質,如 隊列為 先進先出 棧為 先進後出 棧需要...

順序棧和鏈棧實現

以前參照weiss的 資料結構與演算法分析 寫過兩篇隨筆 因為考研的緣故,現在看了嚴蔚敏的 資料結構 c版 也跟著寫了一遍,原理都類似 鏈棧 鏈棧 typedef status typedef struct node stack typedef struct node ptrtonode struc...

棧和隊的實現8 鏈隊

include pch.h include using namespace std typedef int qelemtype 資料型別 typedef struct qnode qnode,queueptr 結點型別 typedef struct linkqueue 結點指標型別 1.初始化 bo...