資料結構——順序表
阿新 • • 發佈:2018-12-17
順序儲存的線性表(順序表) a.初始化 b.插入節點 c.遍歷
優點:訪問隨機 缺點:需要大片連續記憶體,插入刪除需要挪動元素,效率低
程式碼實現:
typedef struct ARRAY //用於管理順序表的資料型別 { int * parr;//順表的起始地址 int len;//表示能夠儲存的資料節點的個數 int cnt;//已經使用了的表項個數 }ARR,*PARR; void init_seq_list(PARR p,int length)//初始化一個順序表 { p->parr = malloc(sizeof(int)*length); if(p->parr == NULL) { printf("malloc failed!\n"); exit(-1); } p->len = length; p->cnt = 0; } bool is_full(PARR p) //判斷表滿 { if(p->cnt == p->len) return true; else return false; } bool insert_seq_list(PARR p,int pos,int data)//順序表的插入 { int i; if(is_full(p)) return false; if((pos <1) || (pos > (p->cnt + 1)) ) return false; for(i = p->cnt -1;i>=pos-1;i--) { p->parr[i+1]=p->parr[i]; } p->parr[pos-1] = data; p->cnt++; return true; } bool is_empty(PARR p)//判斷表空 { if(p->cnt == 0) return true; else return false; } void show_seq_list(PARR p)//順序表的遍歷 { int i; if(is_empty(p)) { printf("沒得show\n"); return; } for(i=0;i< p->cnt;i++) printf("%d\t",p->parr[i]); printf("\n"); } bool del_seq_list(PARR p,int pos,int *pdata)//順序表的刪除 { int i; if(is_empty(p)) { printf("沒得刪\n"); return false; } if(pos < 1 || pos > p->cnt) return false; *pdata = p->parr[pos-1]; for(i=pos;i<p->cnt;i++) p->parr[i-1]=p->parr[i]; p->cnt--; return true; }