零基礎學資料結構 樣張試讀2

2021-08-25 20:38:07 字數 1613 閱讀 1000

下面通過乙個例項來說明鏈式佇列的具體使用。

例5_3 程式設計判斷乙個字串行是否是回文。回文是指乙個字串行以中間字元為基準兩邊字元完全相同,即順著看和倒著看是相同的字串行。如字串行「xyzazyx」就是回文,而字串行"xyzbzxy"就不是回文。

分析:考察棧的「先進後出」和佇列的「先進先出」的特點,可以通過構造棧和佇列實現。可以把字串行分別存入佇列和堆疊,然後依次把字元逐個出佇列和出棧,比較出佇列的字元和出棧的字元是否相等,如果全部相等則該字串行是回文,否則不是回文。

我們在這裡採用鏈式堆疊和只有隊尾指標的鏈式迴圈佇列實現,實現**如下。

#include/*包含輸出函式*/

#include/*包含退出函式*/

#include/*包含字串長度函式*/

#include/*包含記憶體分配函式*/

typedef char datatype; /*型別定義為字元型別*/

/*鏈式堆疊結點型別定義*/

typedef struct snode

lsnode;

/*只有隊尾指標的鏈式迴圈佇列型別定義*/

typedef struct qnode

lqnode,*linkqueue;

void initstack(lsnode **head)

/*帶頭結點的鏈式堆疊初始化*/

else

(*head)->next=null; /*頭結點的指標域設定為空*/

}int stackempty(lsnode *head)

/*判斷帶頭結點鏈式堆疊是否為空。如果堆疊為空,返回1,否則返回0*/

int pushstack(lsnode *head,datatype e)

/*鏈式堆疊進棧。進棧成功返回1,否則退出*/

}int popstack(lsnode *head,datatype *e)

/*鏈式堆疊出棧,需要判斷堆疊是否為空。出棧成功返回1,否則返回0*/

}void initqueue(linkqueue *rear)

/*將帶頭結點的鏈式迴圈佇列初始化為空佇列,需要把頭結點的指標指向頭結點*/

int queueempty(linkqueue rear)

/*判斷鏈式佇列是否為空,隊列為空返回1,否則返回0*/

int enterqueue(linkqueue *rear,datatype e)

/*將元素e插入到鏈式佇列中,插入成功返回1*/

int deletequeue(linkqueue *rear,datatype *e)

/*刪除鏈式佇列中的隊頭元素,並將該元素賦值給e,刪除成功返回1,否則返回0*/

{lqnode *f,*p;

if(*rear==(*rear)->next) /*在刪除隊頭元素即出佇列之前,判斷鏈式佇列是否為空*/

return 0;

else

{f=(*rear)->next; /*使指標f指向頭結點*/

p=f->next; /*使指標p指向要刪除的結點*/

if(p==*rear) /*處理佇列中只有乙個結點的情況*/

{*rear=(*rear)->next;/*使指標rear指向頭結點*/

(*rear)->next=*rear;

簡單選擇排序 零基礎學資料結構

簡單選擇排序選擇排序的基本思想是 從待排序的元素序列中選擇關鍵字最小或最大的元素,將其放在已排序元素序列的最前面或最後面,其餘的元素構成新的待排序元素序列,並從待排序元素序列中選擇關鍵字最小的元素,將其放在已排序元素序列的最前面或最後面。依次類推,直到待排序元素序列中沒有待排序的元素,選擇排序結束。...

簡單選擇排序 零基礎學資料結構

簡單選擇排序選擇排序的基本思想是 從待排序的元素序列中選擇關鍵字最小或最大的元素,將其放在已排序元素序列的最前面或最後面,其餘的元素構成新的待排序元素序列,並從待排序元素序列中選擇關鍵字最小的元素,將其放在已排序元素序列的最前面或最後面。依次類推,直到待排序元素序列中沒有待排序的元素,選擇排序結束。...

簡單選擇排序 零基礎學資料結構

簡單選擇排序選擇排序的基本思想是 從待排序的元素序列中選擇關鍵字最小或最大的元素,將其放在已排序元素序列的最前面或最後面,其餘的元素構成新的待排序元素序列,並從待排序元素序列中選擇關鍵字最小的元素,將其放在已排序元素序列的最前面或最後面。依次類推,直到待排序元素序列中沒有待排序的元素,選擇排序結束。...