棧和佇列演算法

2021-08-21 07:06:46 字數 2693 閱讀 4326

1、實現乙個棧,要求實現push(出棧)、pop(入棧)、min(返回最小值)的時間 複雜度為o(1)

方法1:使用乙個棧實現,交叉棧

#pragma once

#include#define max_value 100

typedef struct minstackminstack;

//實現乙個棧,要求實現push(入棧)、pop(出棧)、min(返回最小值)的時間,複雜度為o(1)

/*兩個方法:

1、乙個棧,交叉棧;

2、兩個棧

*/void init(minstack *pms)

void push(minstack *pms, int data)

pms->array[pms->top++] = data;//先放普通資料

pms->array[pms->top++] = min;//再放當前最小數

}void pop(minstack *pms)

int min(minstack *pms)

int top(minstack *pms)

void test1()

; for (int i = 0; i < sizeof(arr) / sizeof(int); i++)

printf("%d ", min(&ms));

pop(&ms);

printf("%d ", min(&ms));

pop(&ms);

printf("%d ", min(&ms));

}

方法2:使用兩個棧

#pragma once

#include#define max_value 100

//兩個棧

typedef struct minstackminstack;

//實現乙個棧,要求實現push(入棧)、pop(出棧)、min(返回最小值)的時間,複雜度為o(1)

/*兩個方法:

1、乙個棧,交叉棧;

2、兩個棧

*/void init(minstack *pms)

void push(minstack *pms, int data)

pms->array1[pms->top1++] = data;

pms->array2[pms->top2++] = min;*/

//不再每次都入最小棧

pms->array1[pms->top1++] = data;

if (pms->top2 == 0 || data <= pms->array2[pms->top2 - 1])

}void pop(minstack *pms)

pms->top1--;

}int min(minstack *pms)

int top(minstack *pms)

void test2()

; for (int i = 0; i < sizeof(arr) / sizeof(int); i++)

printf("%d ", min(&ms));

pop(&ms);

printf("%d ", min(&ms));

pop(&ms);

printf("%d ", min(&ms));

}

所用棧方法可見:棧操作

2、遞迴棧逆置

//top:棧大小

public class reversestack

if (top <= stack.length / 2)

int tmp = stack[top - 1];

stack[top - 1] = stack[stack.length - top];

stack[stack.length - top] = tmp;

return reversestackrecursively(stack, top - 1);

}}

3、題目描述:堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。

輸入:對於每組測試資料,第一行是乙個正整數 n,0stack = null;

@suppresswarnings("resource")

public void solution()

system.out.println();

} }private void judge(char data) else

} break;

case 'p':

break;

case 'o': else

} break;

} }}4、字串陣列運算

eg:

string str = ;
public class solution  else 

} return s.pop();

} public int calculate(string str, int a, int b)

}}

5、使用兩個棧實現乙個佇列

public class solution 

public int pop()

} return stack2.pop().intvalue();

}}

演算法 佇列和棧

雙端佇列的首部和尾部都可以亞壓入元素 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 避免物件游...

演算法專題 棧和佇列

在j a中棧使用arraydeque和linkedlist,這兩個集合類既實現了list介面,也實現了deque介面。因此以上集合類可以當棧也可以當雙端佇列使用。1 使用兩個棧完成getmin功能,分別為data棧和min棧 壓入規則 將資料壓入data棧,判斷min棧是否為空 彈出規則 將data...