連結串列-插入排序
Problem Description
現有 n 個從小到大排列的陣列成的序列。需要對這個序列進行 c 次操作。
每次操作有兩種型別:
- 操作 1:插入一個數 v 到序列中,並保持有序。
- 操作 2:輸出當前的序列。
bLue 並不太擅長序列操作,所以他想來請求你的幫助,你能幫助他完成這個任務嗎?
Input
輸入資料有多組(資料組數不超過 30),到 EOF 結束。
對於每組資料:
- 第 1 行輸入一個整數 n (1 <= n <= 10^5),表示初始的有序序列中數字的個數。
- 第 2 行輸入 n 個用空格隔開的整數 ai (0 <= ai <= 10^6),表示初始序列。
- 第 3 行輸入一個整數 c (1 <= c <= 1000),表示有 c 次操作。
- 接下來有 c 行,每行表示一次操作:
- 如果操作型別為 1,則輸入格式為 "1 v",其中 v (0 <= v <= 1000) 表示要插入到序列的數。
- 如果操作型別為 2,則輸入格式為 "2"。
Output
對於每組資料中的每次型別為 2 的操作,輸出一行,表示當前的序列,每個數之間用空格隔開。
Sample Input
5
1 2 2 3 5
5
1 0
2
1 3
1 7
2
Sample Output
0 1 2 2 3 5
0 1 2 2 3 3 5 7
Hint
Source
【第六屆ACM趣味程式設計迴圈賽 Round #2】bLue
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Node{
int data;
struct Node *next;
//struct Node *prime;
}node;
void create(node * &head,int count){
node *tail,*p;
head = new Node;
head->next = NULL;
tail = head;
for(int i = 0 ; i < count;i++){
p = new Node;
scanf("%d",&p->data);
p->next = NULL;
tail->next = p;
tail = p;
}
}
void print(node * &head){
node *p;
//p = new Node;
p = head->next;
while(p){
if(p->next == NULL){
printf("%d\n",p->data);
}else{
printf("%d ",p->data);
}
p = p->next;
}
}
void add(node * &head,int n){
node *p,*q;
node *tail;
tail = new Node;
tail = head;
int a,b;
for(int i = 0 ; i < n ; i++){
scanf("%d",&a);
if(a == 1){
scanf("%d",&b);
p = new Node;
//q = new Node;
//printf(" %d ",b);
for(q = tail;((q->next != NULL)&&(q->next->data < b)); q = q->next);
p->data = b;
p->next = q->next;
q->next = p;
//print(head);
}else{
print(head);
}
}
}
int main(){
ios::sync_with_stdio(false);
node *head;
node *p,*q;
//head = new Node;
//head->next = NULL;
int count,n;
while(~scanf("%d",&count)){
create(head,count);
scanf("%d",&n);
add(head,n);
p = head->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
}
return 0;
}
注意使用結束之後要刪除節點,否則會爆記憶體
相關文章
- 147. 對連結串列進行插入排序排序
- 力扣 147. 對連結串列進行插入排序力扣排序
- 單連結串列增刪改查和歸併插入排序排序
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列入門與插入連結串列
- (連結串列)連結串列的排序問題排序
- 連結串列
- 雙連結串列插入排序例項程式碼排序
- javascript中的連結串列結構—雙向連結串列JavaScript
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- php連結串列PHP
- 連結串列操作
- 連結串列逆序
- 2、連結串列
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- 資料結構-單連結串列、雙連結串列資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列專題——面試中常見的連結串列問題面試
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 連結串列(python)Python
- 雙向連結串列
- 反轉連結串列
- 構建連結串列