ACM zoj 2724 堆實現 發現段錯誤

2021-06-11 01:42:51 字數 795 閱讀 2111

之前做acm題目時偶爾會出現段錯誤。段錯誤,之前也講過,主要是記憶體的越界訪問;但今天遇到的段錯誤的原因有些特殊,就是c++中的string型別也會引起段錯誤!!

先看源**:

#include #include #include #include using namespace std;

struct heap

heap[60010];

//下滑操作

void siftdown(int start,int end)

} heap[i]=heap[0];

}//向上調整的函式

//將結點start調整到根結點1為止

void siftup(int start)

} heap[j]=heap[0];

}//插入操作的實現

bool insert(int& num,heap& temp)

//刪除操作

bool removemin(int& num,heap& temp)

int main()

}}

重點是在結構體heap中,當我將heap中的成員msg由字元陣列型別改為string型別時就會出現段錯誤,改回來時就ac。這可能是由於編譯器對c++所支援的標準不一樣造成的,有些編譯器可能對string型別支援的不是很好(包括之前用c++的類來做acm題時也有段錯誤);而編譯器對c語言支援的標準基本一致,所以做acm題目時應盡量用c的語法或標準來做題,避免因編譯器的不同導致一些看起來無法理解的錯誤。

python堆 Python實現堆

堆 heap 是一種經過排序的完全二叉樹,其中任一非葉子節點的值均不大於 或不小於 其左孩子和右孩子節點的值。堆,又被為優先佇列 priority queue 儘管名為優先佇列,但堆並不是佇列。其他概念解釋 最大堆 根結點的鍵值是所有堆結點鍵值中最大者。最小堆 根結點的鍵值是所有堆結點鍵值中最小者。...

1 實現堆結構

總時間限制 3000ms 記憶體限制 65535kb 描述 定義乙個陣列,初始化為空。在陣列上執行兩種操作 1 增添1個元素,把1個新的元素放入陣列。2 輸出並刪除陣列中最小的數。使用堆結構實現上述功能的高效演算法。輸入第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n...

堆 鍊錶實現

小頂堆大頂堆的概念大家應該都很熟悉了,如果不了解,可以搜尋一下,網上很多介紹,而且很多原始碼實現,都很簡單。不過從網上看了一些堆的實現,都是用陣列的。但是陣列有乙個缺陷,需要擴充套件時,就要複製原來的記憶體,申請新的空間。所以我在想能不能用鍊錶,發現還真可以,就湊湊寫了個 最後 是寫完了,發現其實鍊...