鏈式表示的佇列 鏈式佇列3 判斷是否為回文

2021-09-02 01:39:28 字數 2526 閱讀 4546

編寫乙個演算法,判斷任意給定的字串行是否為回文。所謂回文是指乙個把字串行的中間字元作為基準,兩字元完全相同,即從兩個方向看,都是相同的字串行。

例如,字串行「abcdefedcba」為回文,而字串行「xabcdcaax」不是回文。

【分析】

這個題目考察對棧的「後進先出」思想和佇列的「先進先出」思想理解及應用,判斷是否為回文可通過構造棧和佇列來實現。具體做法是:可以先把乙個字串行分別入隊和入棧,然後將字元出隊和出棧,這是利用了出隊的順序和出棧的順序剛好相反,同時比較出隊的字元和出棧的字元是否相等,若相等,則繼續取出佇列和棧中的下乙個字元進行比較,直到棧和隊列為空,表明該字串行為回文;若有字元不相等,則該字元不是回文。

linkqueue.h

#pragma once

#include using namespace std;

#include typedef char datatype;

typedef struct qnode

lqnode,*queueptr;

typedef struct

linkqueue;

//初始化鏈式佇列

void initqueue(linkqueue *lq)

lq->front->next = null;

}//判斷鏈式佇列是否為空

int queueempty(linkqueue lq)

else }

//將元素e入隊

int enqueue(linkqueue *lq, datatype e)

s->data = e;

s->next = null;

lq->rear->next = s;

lq->rear = s;

return 1;

}int dequeue(linkqueue *lq, datatype *e)

else

free(s);

return 1; }}

int gethead(linkqueue lq, datatype *e)

else }

void clearqueue(linkqueue *lq)

}

linkstack.h

#pragma once

#include #include using namespace std;

typedef char datatype;

typedef struct node

lstacknode,*linkstack;

void initstack(linkstack *top)

(*top)->next = null;

}int stackempty(linkstack top)

else }

int pushstack(linkstack top, datatype e)

p->data = e;

p->next = top->next;

top->next = p;

return 1;

}int popstack(linkstack top, datatype *e)

top->next = p->next;

*e = p->data;

free(p);

return 1;

}int gettop(linkstack top, datatype *e)

*e = p->data;

return 1;

}int stacklength(linkstack top)

return count;

}void destorystack(linkstack top)

}

main.cpp

#include "linkqueue.h"

#include "linkstack.h"

#include #include #include typedef char datatype;

void printstackqueue(linkstack lstack,linkqueue lqueue);

void main()

for (i = 0; i < strlen(str2);i++)

cout << "字串行1:" << str1 << endl;

printstackqueue(lstack1, lqueue1);

cout << "字串行2:" << str2 << endl;

printstackqueue(lstack2, lqueue2);

system("pause");

}void printstackqueue(linkstack lstack, linkqueue lqueue)

} cout << "該字串行是回文!" << endl;

}

結果:

佇列的鏈式表示

主題 佇列的鏈式表示 開發環境 visual studio 開發語言 c include include include typedef int elemtype typedef enum boolean 結點 typedef struct qnode qnode,pqnode 佇列 typedef...

佇列的鏈式表示

佇列是和棧相反的一中線性結構,棧的後進先出lifo結構,而佇列是先進先出fifo結構。它只允許在表的一端進行插入,而在另一端進行刪除。1 2和棧相反,佇列是一種先進先出fifo的結構,包括隊頭front,隊尾rear 3使用鏈式結構表示佇列時,分別乙個頭指標和尾指標。為操作方便,鏈佇列也有乙個頭結點...

鏈式結構表示佇列

define qdatatype int typedef struct qlistnode qnode 佇列的結構 typedef struct queue queue 初始化佇列 void queueinit queue q 隊尾入佇列 void queuepush queue q,qdataty...