標籤:tde def 增量 16px malloc listt logs include pos
1.線性表(linear_list):
特點:
在資料元素的非空有限集合中
- 存在惟一的一個被稱作“第一個”的資料元素;
- 存在惟一的一個被稱作“最後一個”的資料元素;
- 除第一個之外,集合中的每一個資料元素均只有一個前驅
- 除最後一個之外,集合中的每一個資料元素均只有一個後繼
2.線性表的順序表示:用一組地址連續的儲存單元依次儲存線性表的資料元素
#include <bits/stdc++.h>using namespace std;#define LIST_INIT_SIZE 100 /// 線性表格儲存體空間的初始分配量#define LISTINCREMENT 10 /// 線性表格儲存體空間的分配增量#define Elemtype int#define Status int#define OK 1#define ERROR -1#define OVERFLOW -2typedef struct{ Elemtype *elem; int length; int listsize;}Sqlist;Status InitList_Sq(Sqlist &L){ L.elem = (Elemtype * )malloc(LIST_INIT_SIZE*sizeof(Elemtype)); if (!L.elem) { return OVERFLOW; } L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;}Status DestroyList_Sq(Sqlist &L){ if (L.length > 0 ) { free(L.elem); free(&L); } return OK;}Status ClearList_Sq(Sqlist &L){ L.length = 0; return OK;}Status IsEmptyList_Sq(Sqlist &L){ if (L.length == 0) return OK; else return ERROR;}Status GetLengthList_Sq(Sqlist &L){ return L.length;}Status GetElem(Sqlist &L,int i,Elemtype &e){ if (i < 1 || i > L.length + 1 ) return ERROR; else { e = L.elem[i-1]; return OK; }}Status ListInsert_Sq(Sqlist &L, int i, Elemtype e){ if (i < 1 || i > L.length + 1 )return ERROR; if (L.length >= L.listsize) { Elemtype *newbase = (Elemtype *) realloc(L.elem,L.listsize + LISTINCREMENT * sizeof(Elemtype)); if (!newbase) { return OVERFLOW; } L.elem = newbase; L.listsize += LISTINCREMENT; } int *last = &L.elem[i-1]; for (int *index = &(L.elem[L.length-1]); index >= last; index --) { *(index +1) = *index ; } *last = e; ++L.length; return OK;}Status ListDeleteByPos_Sq(Sqlist &L,int i,Elemtype &e){ if (i < 1 || i > L.length) return ERROR; int *pos = &L.elem[i-1]; e = *pos; int *last = L.elem + L.length -1; for (pos++; pos <= last; pos++) { *(pos-1) = *pos; } L.length--; return OK;}Status ListDeleteByVal_Sq(Sqlist &L,Elemtype e){ int *index = &L.elem[0]; int *last = &L.elem[L.length-1]; for (; index <= last; index++) { if (*index == e) { for (int *k = index +1; k <= last; k++) *(k-1) = *k; L.length--; index--;///因為p的值已經更新了,需要在判斷一次 } } return OK;}Status ListTraverse_Sq(Sqlist &L){ for (int i=0; i<L.length; i++) { i<L.length-1 ? printf("%d ",L.elem[i]):printf("%d\n",L.elem[i]); } return OK;}int main(){ Sqlist Sq_list; InitList_Sq(Sq_list); int n; scanf("%d",&n); for (int i=0; i<n; i++) { int val; scanf("%d",&val); ListInsert_Sq(Sq_list,i+1,val); } ListTraverse_Sq(Sq_list); int dele_val,dele_pos; scanf("%d",&dele_pos); ListDeleteByPos_Sq(Sq_list,dele_pos,dele_val); ListTraverse_Sq(Sq_list); return 0;}
【 資料結構(C語言)】 線性表順序表示和實現