1. 程式人生 > 其它 >redis_04 _ AOF日誌:宕機了,Redis如何避免資料丟失

redis_04 _ AOF日誌:宕機了,Redis如何避免資料丟失

陣列(array)

  這裡所講的陣列和前面知識講的差不多一樣,都是開闢一片連續儲存的空間,只不過這裡只是認為定義了一個類陣列的結構體。

一、利用陣列儲存資料的優缺點

  優點:存取速度快,實現容易理解。

  缺點:插入刪除元素很慢,因為每次都需要左移或者右移。

二、和陣列有關的基本操作

  初始化:先宣告一個數組型別,定義一個結構體變數,為變數成員賦初值。

  追加:追加之前判斷陣列是否滿;在末尾新增元素。

  插入:插入之前判斷陣列是否滿;在指定位置開始右移,插入元素。

  刪除:刪除之前判斷陣列是否空;在指定位置刪除元素,再左移。

  排序:使用冒泡、選擇排序。

三、和陣列有關的演算法

  基本操作程式:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

struct Arr
{
    int *pBase;//指向第一個元素地址
    int len;//陣列長度
    int cnt;//當前長度
};

void init_arr(struct Arr *pArr,int length);
int append_arr(struct Arr *pArr,int Val);
int insert_arr(struct Arr *pArr,int pos,int Val);
int delete_arr(struct
Arr *pArr,int pos,int *Val); void inversion_arr(struct Arr *pArr); void sort_arr(struct Arr *pArr); int is_empty(struct Arr *pArr); int is_full(struct Arr *pArr); void show_arr(struct Arr *pArr); void init_arr(struct Arr *pArr,int length) { pArr->pBase=(int *)malloc(sizeof(int)*length);
if(NULL==pArr->pBase)//分配失敗返回空指標 { printf("動態記憶體分配失敗!\n"); exit(-1);//終止整個程式 } else { pArr->len=length; pArr->cnt=0; } return;//空型別之所以要return,是為了告訴別人你這個函式寫完了 } int append_arr(struct Arr *pArr,int Val) { if(is_full(pArr)) { printf("該陣列已滿");//即使返回型別為int,也可以printf return 0; } else { *(pArr->pBase+pArr->cnt)=Val; pArr->cnt++; return 1; } } int insert_arr(struct Arr *pArr,int pos,int Val)//pos從1開始,同時在pos前插入資料 { int i; if(is_full(pArr)) return 0; if(pos<1 || pos>pArr->cnt+1) return 0; for(i=pArr->cnt;i>=pos-1;i--)//向右迴圈移動 { *(pArr->pBase+i)=*(pArr->pBase+i-1); } *(pArr->pBase+pos-1)=Val; pArr->cnt++; return 1; } int delete_arr(struct Arr *pArr,int pos,int *Val) { int i; if(is_empty(pArr)) return 0; if(pos<1 || pos>pArr->cnt) return 0; *Val=*(pArr->pBase+pos-1); for(i=pos;i<pArr->cnt;i++)//向左迴圈移動 *(pArr->pBase+i-1)=*(pArr->pBase+i); pArr->cnt--; return 1; } void inversion_arr(struct Arr *pArr) { int i,j,t; if(is_empty(pArr)) return; i=0; j=pArr->cnt-1; while(i<j)//倒序的演算法,要記 { t=*(pArr->pBase+i); *(pArr->pBase+i)=*(pArr->pBase+j); *(pArr->pBase+j)=t; i++; j--; } return; } void sort_arr(struct Arr *pArr) { int i,j,t; for(i=0;i<pArr->cnt-1;i++)//氣泡排序法 { for(j=1;j<pArr->cnt-i;j++) { if(*(pArr->pBase+j-1)>*(pArr->pBase+j)) { t=*(pArr->pBase+j-1); *(pArr->pBase+j-1)=*(pArr->pBase+j); *(pArr->pBase+j)=t; } } } return; } int is_empty(struct Arr *pArr) { if(pArr->cnt==0) return 1; return 0; } int is_full(struct Arr *pArr) { if(pArr->cnt==pArr->len) return 1; return 0; } void show_arr(struct Arr *pArr) { int i; if(is_empty(pArr)) printf("該陣列為空\n"); else { for(i=0;i<pArr->cnt;i++) printf("%d",*(pArr->pBase+i)); printf("\n"); } } void main() { struct Arr arr; int val; init_arr(&arr,6); append_arr(&arr,2); append_arr(&arr,1); append_arr(&arr,3); append_arr(&arr,5); append_arr(&arr,4); append_arr(&arr,6); show_arr(&arr); if(!append_arr(&arr,7)) printf("追加失敗\n"); show_arr(&arr); if(!insert_arr(&arr,3,7)) printf("插入失敗\n"); show_arr(&arr); delete_arr(&arr,3,&val); show_arr(&arr); printf("val=%d\n",val); inversion_arr(&arr); show_arr(&arr); sort_arr(&arr); show_arr(&arr);; }

  日後補充