使用標誌量消除迴圈鍊錶「假溢位」的入隊和出隊演算法

2021-08-20 05:33:49 字數 2034 閱讀 7427

問題:要求迴圈變數不損失乙個空間全部都能利用,設定乙個標誌量tag,以tag為0或為1來區分頭尾指標相同時的佇列狀態。請編寫出此結構相應的入隊與出隊演算法。

設標誌位tag,初始化時將tag置為0,當入隊成功時tag = 1;出隊成功時tag = 0;隊列為空的判斷條件為:(scq->front == scq->rear) && (scq->tag == 0)隊列為滿的判斷條件為:(scq->front == scq->rear) && (scq->tag == 1)

入隊演算法

void

enterqueue(seqcirqueue* scq,datatype

data)

//在隊尾插入元素data

scq->queue[scq->rear] = data;

//隊尾指標後移乙個位置

scq->rear = (scq->rear + 1)%maxsize;

//入隊成功令tag =1

scq->tag = 1;

}

出隊演算法

int

deletequeue(seqcirqueue* scq, datatype* data)

//將出隊元素值賦給打他

*data = scq->queue[scq->front];

//隊頭指標後移

scq->front = (scq->front + 1)%maxsize;

//將tag置0

scq->tag = 0;

//返回出隊元素值

return *data;

}

源**

#include 

#include

#include

#include

#define maxsize 10

typedef

int datatype;

typedef

struct scqueue

seqcirqueue ;

//佇列的初始化

void initqueue(seqcirqueue* scq)

//判斷佇列是否為空

int isempty(seqcirqueue* scq)

return0;}

//判斷佇列是否為滿

int isfull(seqcirqueue* scq)

return0;}

//入隊操作

void enterqueue(seqcirqueue* scq,datatype data)

//在隊尾插入元素data

scq->queue[scq->rear] = data;

//隊尾指標後移乙個位置

scq->rear = (scq->rear + 1)%maxsize;

//入隊成功令tag =1

scq->tag = 1;

}int deletequeue(seqcirqueue* scq, datatype* data)

//將出隊元素值賦給打他

*data = scq->queue[scq->front];

//隊頭指標後移

scq->front = (scq->front + 1)%maxsize;

//將tag置0

scq->tag = 0;

//返回出隊元素值

return *data;

}// 列印佇列元素

void printqueue(seqcirqueue* scq)

}else

}printf("\n");

}int main()

執行結果

使用迴圈鍊錶完成超長正整數的加法

沒有使用free 函式 大數的運算用陣列做更方便,只是根據題目要求使用迴圈鍊錶來做。超長正整數的加法。include include include define numlength 100 輸入最大數長 typedef struct nodenode void addnode node pnode...

使用迴圈和鍊錶完成的歸併排序

package com.sort public class guibing sort arr public static void sort int arr 開始迴圈歸併,每次迴圈完成乙個步長的合併 while true node newarr newnode newlength 開始合併鍊錶 fo...

使用只有表尾指標或只有表頭指標的單迴圈鍊錶的情況

使用只有表尾指標沒有表頭指標 迴圈單鏈表指的是最後節點的指標域指向表頭節點,如果要刪除第乙個元素,只需要通過表尾指標找到第二個節點,然後將最後節點的指標指向第二個節點,就將第乙個元素刪除了 單鏈表指的是最後節點的指標域指向 表頭節點,如果要刪除第乙個元素,只需要通過表尾指標找到第二個節點,然後將最後...