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...