根據佇列和棧的性質
佇列找尾部最大的車廂號
棧找尾部最小的車廂號
棧、佇列、陣列可用stl或者自己實現
#pragma once
#include "vector.h"
#include "queue.h"
#include "stack.h"
#include const char* inputvectorfilename = "carriagesrearrangement.txt";
const char* resultfile = "carriagesresult.txt";
templateconst int calculatek(vector& v)
} return k;
}void generatetestdata(const char* filename, const int &n)
for (int i = 0; i < n; ++i)
for (int i = 0; i < n; ++i)
fout.close(); }}
templatevoid inputvectorfromfile(vector& v, const char* filename)
v.reverse();
fin.close(); }}
vectorcarriagesrearrangement_queue(vector&carriages, const int k, const char* filename)
queue*buffer = new queue[k]; // 緩衝車廂
vectorarrangedcarriages; // 排序後的車廂
arrangedcarriages.push_back(0); // 加入乙個頭節點
// i和j用於迴圈
int i = null, j = null;
// n記錄車廂總長
int n = carriages.size();
// temp記錄第i節車廂
int temp = null;
// max和tag記錄最大的車廂及其編號
int max = null, tag = null;
for (i = 0; i < n; ++i)
max = 0;
tag = 0;
/**如果不滿足上面的條件
*在尾部車廂號最大的車廂後面插入
*否則找乙個新的緩衝軌插入
*/for (j = 0; j < k; ++j)
else
}// 用來找比當前車廂號大的最大車廂號
if (buffer[j].back() < temp) }}
} bool correcttag = false;
// 退隊過程
while (arrangedcarriages.size() <= n)
}if (!correcttag)
} arrangedcarriages.erase(0); // 刪除頭節點
fout.close();
return arrangedcarriages.reverse();
} return carriages;
}vectorcarriagesrearrangement_stack(vector&carriages, const int k, const char* filename)
stack*buffer = new stack[k]; // 緩衝車廂
vectorarrangedcarriages; // 排序後的車廂
arrangedcarriages.push_back(0); // 加入乙個頭節點
// i和j用於迴圈
int i = null, j = null;
// n記錄車廂總長
int n = carriages.size();
// temp記錄第i節車廂
int temp = null;
// min和tag記錄最小的車廂及其編號
int min = null, tag = null;
for (i = 0; i < n; ++i)
min = n + 1;
tag = 0;
/**如果不滿足上面的條件
*在尾部車廂號最小的車廂後面壓入
*否則找乙個新的緩衝軌壓入
*/for (j = 0; j < k; ++j)
else
}// 用來找比當前車廂號小的最小車廂號
if (temp < buffer[j].top()) }}
} bool correcttag = false;
// 出棧過程
while (arrangedcarriages.size() <= n)
}if (!correcttag)
} arrangedcarriages.erase(0); // 刪除頭節點
fout.close();
return arrangedcarriages.reverse();
} return carriages;
}void carriagestest()
驗證棧的序列 車廂排程
做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多 時間限制 1000 ms 記憶體限制 65536 kb 提交數 8476 通過數 4298 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 10...
驗證棧的序列 車廂排程
做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多 時間限制 1000 ms 記憶體限制 65536 kb 提交數 8476 通過數 4298 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 10...
棧和佇列的手動實現 用棧實現佇列 用佇列實現棧
1 用陣列結構實現大小固定的棧和佇列 1 棧 public static class arraystack arr new integer initsize size 0 public integer peek 返回棧頂元素但並不讓元素出棧 return arr size 1 public void...