資料演算法中的棧和佇列(FIFO)

2022-07-12 05:18:09 字數 2843 閱讀 6916

1.棧

棧是特殊的線性表,順序儲存

typedef  int  elemtype;

struct stack

elemtype data[maxsize];

int  top; // 存放棧頂指標

bool initstack(stack *s)  //初始化乙個棧

bool pushstack(stack *s,elemtype e)

if(s->top == maxsize - 1)  //棧滿

return false;

s->top++;  //棧頂指標++ ,壓棧壓入棧底

s->data[s->top] = e;  

return true;

bool popstack(stack *s)

while(s->top != -1)    //出棧,從棧頂出

printf("%d ", s->data[ s->top]);

s->top--;   

return true;

入棧和出棧的時間複雜度均為o(1),但棧需要開闢合適的空間來存放對應的資料

1.1棧的鏈式儲存結構

棧頂指標作為頭節點不改變,棧頂放在單鏈表的頭部

struct node

;  // 單鏈表的結構,儲存鍊錶棧中的資料

struct linkstack

;bool initlinkstack(linkstack *s)  // 鏈棧需要初始化

bool pushlinkstack(linkstack *s,elemtype e)

node *l= (struct node*)malloc(sizeof(node));

l->data = e;

l->next = s->top;  //棧頂指標下移

s->top = l;  //將棧頂指標賦值單鏈表的頭指標

l = s->top;  //棧頂節點賦值給l

s->top = s->top->next;  //棧頂指標下移

free(l);//釋放最上面的棧頂節點

2.佇列(fifo)

插入資料只能在隊尾進行,刪除資料在隊頭進行

佇列需要指定長度

front指標指向隊頭指標,rear指標指向隊尾的下乙個位置

當front = rear時,此時隊列為空

迴圈佇列中,front = rear且計數count = 佇列的大小,則為隊滿

front = rear且計數count =0,則為隊空

typedef maxsize 20;  //佇列的長度

struct queue

elemtype data[maxsize];

int front;//隊頭指標

int rear;      //尾指標,指向尾元素的下乙個位置

int cout;   //佇列中元素計數

bool initqueue(queue *q)

q->front = q->rear;

q->count = 0;//計數值為0,隊列為空

return true;

//入隊

bool inputqueue(queue *q,elemtype e)

if((q->front == q->rear)&&q->count == maxsize)

return false;  //隊滿

else

q->data[q->rear] = e;

q->rear = (q->rear + 1)%maxsize;// 對佇列長度取餘數,在超過佇列長度後,rear指向佇列空的位置

q->count++;  //佇列中元素個數++

return true;

bool outqueue(queue *q)

if((front == rear)&&q->count == 0)

return false;    //此時隊列為空

else

printf("%d ",q->data[q->front]);   // 從隊頭出元素

q->front = (q->front + 1)% maxsize;  // 隊頭往後移動

q->count--;

return true;

棧和佇列演算法

1 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值 的時間 複雜度為o 1 方法1 使用乙個棧實現,交叉棧 pragma once include define max value 100 typedef struct minstackminstack 實現乙個棧,要求實現pu...

演算法 佇列和棧

雙端佇列的首部和尾部都可以亞壓入元素 public class statck stacktest array public static void stacktest int array else else data.push array i system.out.println 每一步棧的最小值 ...

演算法 棧和佇列

佇列public inte ce mystackextends iterable public class arraystackimplements mystack override public item pop throws exception item item a n check 避免物件游...