title:一串數字,每次都把開頭的數刪除,第二個數放到隊尾巴,按這樣的刪除的數字順序是什麼 struct queue { int data[100];//隊列的主體,用來存儲內容 int head;//隊首 int tail;//隊尾 }; int main(int argc, const char * argv[]) { struct queue q; int i; //初始化隊列 q.head = 1; q.tail = 1; for (i = 1; i <= 9; i++) { scanf("%d",&q.data[q.tail]); q.tail++; //自增在後面,表示隊尾指在最後一個數的後一位 } while (q.head < q.tail) { //首先隊首打印,即刪除的數字 printf("%d ",q.data[q.head]); q.head++; //將新隊首的數添加到隊尾 q.data[q.tail] = q.data[q.head]; q.tail++; //再將隊首出隊 q.head++; } return 0; }
假設目前咱們已經排序好了一串數字,但中途要插入一個數字,這樣的話,大於這個數字的數都要日後移一位了。算法
int main(int argc, const char * argv[]) { /* 假設2個數組,1個爲數字的列表,另一個爲每個數字的右邊的數字的排序 data 2 3 5 8 9 10 18 26 32 right 2 3 4 5 6 7 8 9 0 => data 2 3 5 8 9 10 18 26 32 6 right 2 3 4 5 6 7 8 9 0 10 => data 2 3 5 8 9 10 18 26 32 6 right 2 3 10 5 6 7 8 9 0 4 */ int data[101],right[101]; int i,n,t,len; printf("須要讀入多少個數字"); scanf("%d",&n); for (i = 1; i <= n; i++) { scanf("%d",&data[i]); } len = n; //初始化數組right for (i = 1; i <=n; i++) { if (i!=n) { right[i] = i+1; }else{ right[i] = 0; } } //直接再數組data的末位增長一個數 printf("添加你須要插入的數字"); len++; scanf("%d",&data[len]); //核心算法 //從鏈表的頭部開始遍歷 t =1; while (t != 0) { if (data[right[t]] > data[len]) { //right數組的位置調換 right[len] = right[t]; right[t] = len; break; } //由於位置調換了,本來的位置給放到len即最後處了 t = right[t]; } //輸出鏈表(right數組)中全部的數 t = 1; while (t != 0) { printf("%d",data[t]); t = right[t]; } }