這題涉及大量的插入、刪除操作,一開始想使用簡單的陣列模擬,但是後面涉及插入和刪除操作,就徹底放棄了這個念頭,於是乎決定使用雙端迴圈鍊錶去解決這題。
需要注意的是文中提及到的front指標和front結點;next指標和next結點的區別,這裡提一下,在下面的閱讀中請注意區別。
next結點和next指標的區別:是指當前某一節點k的指向的下乙個結點,具有實際意義的指標變數,而next指標為當前結點k的乙個指標,僅表示指向下一節點的位址。 結點構造,乙個整型資料 no 表示當前結點的編號,另兩個 front 和 next 指標分別指向當前結點的前乙個結點和後乙個結點。
struct node;
需要注意的是結點的插入,將i結點插入到k結點的前乙個結點。先將k結點與front結點分離,即front結點的next指標指向i結點(i),然後將i結點的front指標指向que[k]的front結點指向k的front結點(ii),將k結點的front指標指向i結點(iii),最後將i結點的next指標指向k結點(iv)注:請嚴格遵守i、ii必須在iii之前,iv的順序不存在限制。
que[k].front->next=&que[i];//i
que[i].front=que[k].front;//ii
que[k].front=&que[i];//iii
que[i].next=&que[k];//iv
,將i結點插入k結點的後乙個結點插入步驟參考將i結點插入k結點之前的操作,只是將front指標/結點變為next指標/結點。順序規則相同。
que[k].next->front=&que[i];//i
que[i].next=que[k].next;//ii
que[i].front=&que[k];//iii
que[k].next=&que[i];//iv
刪除結點操作:需要將當前結點的front結點和next結點相互連線在一起,並將k結點的front和next指標指向null值。具體操作為:
將k結點的front結點的next指標指向k結點的next結點;
將k結點的next結點的front指標指向k的front結點。
將k結點的front指標和next指標指向null。
que[k].front->next=que[k].next;
que[k].next->front=que[k].front;
que[k].front=que[k].next=null;
#includeusing namespace std;
const int maxn=1e6+10;//最大資料規模
//雙向鍊錶結點
struct node;
node que[maxn];//雙向鏈結點表陣列
bool visit[maxn];//訪問元素陣列
int main()
//將1號結點得前結點指標、next指標都指向que結點
que[1].front=que[1].next=&que[1];
int p,k;
int head=1;//head表示標記頭結點位置
for(int i=2;i<=n;i++)else if(p==1)
} cin>>m;//輸入m次刪除結點
for(int i=0;i>k;//刪除結點k
if(visit[k])//如果已經刪除結點k就跳過
continue;
visit[k]=true;//標記節點k已刪除
que[k].front->next=que[k].next;//將k結點的front結點的next指標指向k的next結點
que[k].next->front=que[k].front;//將k結點的next結點的front指標指k的front結點
que[k].front=que[k].next=null;//將k的front指標和k的next指標指向null
} k=head;//k標記為當前結點的下標
coutwhile(k!=head)
cout<
洛谷打卡 Day6
題目描述 某國法律規定,只要乙個由 n m個小方塊組成的旗幟符合如下規則,就是合法的國旗。毛熊 阿嚏 從最上方若干行 至少一行 的格仔全部是白色的 接下來若干行 至少一行 的格仔全部是藍色的 剩下的行 至少一行 全部是紅色的 現有乙個棋盤狀的布,分成了 n 行 m 列的格仔,每個格仔是白色藍色紅色之...
Python學習日記day6
字串型別及操作 知識點1 使用 m n k 根據步長對字串切片 m缺失表示至開頭,n缺失表示至結尾。k為步長,擷取的字串位置為m到n 1 知識點2 轉義符號 轉義符號後的字元為原始字元 知識點3 字串操作符 x y 連線兩個字串x和y n x 或 x n 複製n次字串x x in s 如果x是s的子...
CDQZ集訓DAY6 日記
又炸了。早上起來其他競賽生也走了,食堂做飯做的挺潦草,但為什麼四川燒麥的餡是公尺啊?起來看題總覺得都似曾相識。第一題打完40分暴力後想拿莫隊搞到70分,但發現能想到的莫隊維護都是nsqrt n log n的,並不能拿到分,於是先放下打第二題。第二題上來就想錯了。直接打了乙個貪心。後來想了想,為了保分...