1. 線性結(jié)構(gòu)

1 . ArrayList

// ArrarList
# include <stdio.h>

# define OK 1
# define ERROR 0
# define TRUE 1
# define FALSE 0
# define MAXSIZE 20

typedef int Status;
typedef int ElemType;
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}ArrayList;

Status InitList(ArrayList *);
Status ListEmpty(ArrayList);
Status ClearList(ArrayList *);
Status GetElem(ArrayList, int, ElemType *);
Status ListInsert(ArrayList *, int, ElemType);
Status ListDelete(ArrayList *, int, ElemType *);
void ListPrint(ArrayList);

int main(){
        ArrayList list;
        InitList(&list);

        ListInsert(&list, 1, 10);
        ListInsert(&list, 2, 20);
        ListInsert(&list, 3, 30);
        ListInsert(&list, 4, 40);
        ListPrint(list);
        printf("-----------------------\n");

        int val;
        GetElem(list, 4, &val);
        printf("%d\n", val);
        printf("-----------------------\n");

        ListDelete(&list, 3, &val);
        printf("%d\n", val);
        printf("-----------------------\n");
        ListPrint(list);
        printf("-----------------------\n");

        ClearList(&list);
        ListPrint(list);
    return 0;
}

Status InitList(ArrayList * L){
    L->length = 0;
    return OK;
}

Status ClearList(ArrayList * L){
    for (int i = 0; i < L->length; i++) {
            i[L->data] = -1;
    }
    L->length = 0;
    return OK;
}

Status GetElem(ArrayList L, int i, ElemType * e){
    if(L.length == 0 || i < 1 || i > L.length){
        return ERROR;
    }

    *e = L.data[i-1];
    return OK;
}

Status ListInsert(ArrayList * L, int i, ElemType e){
    if(L->length == MAXSIZE){
        return ERROR;
    }

    if(i < 1 || i > L->length + 1){
        return ERROR;
    }

    // 從List尾 往i 移動交換位置
    if(i <= L->length){
        for(int k = L->length-1; k >= i - 1; k--){
            L->data[k+1] = L->data[k];
        }
    }
    L->data[i-1] = e;
    L->length++;

    return OK;
}

Status ListDelete(ArrayList * L, int i, ElemType * e){
    if(L->length == 0){
        return ERROR;
    }

    if(i < 1 || i > L ->length){
        return ERROR;
    }

    *e = L->data[i-1];
    if(i < L->length){
        for(int k = i; k < L->length; k++){
            L->data[k-1] = L->data[k];
        }
    }
    L->length--;
    return OK;
}


void ListPrint(ArrayList L){
    for (int i = 0; i < L.length; i++) {
        printf("%d ", i[L.data]);
    }
    printf("\n");
}

  1. LinkedList
// LinkedList
# include <stdio.h>
# include <stdlib.h>
# include <time.h>

# define OK 1
# define ERROR 0
# define TRUE 1
# define FALSE 0
# define MAXSIZE 20

typedef int Status;
typedef int ElemType;

typedef struct Node{
    ElemType data;
    struct Node *next;;
} Node;
typedef struct Node *LinkedList;

void CreateListHead(LinkedList *, int);
void CreateListTail(LinkedList *, int);
Status ClearList(LinkedList *);
Status GetElem(LinkedList, int, ElemType *);
Status ListInsert(LinkedList *, int, ElemType);
Status ListDelete(LinkedList *, int, ElemType *);
void ListPrint(LinkedList);

int main(){
    LinkedList list;
    CreateListHead(&list, 10);
    ListPrint(list);
    ClearList(&list);

    CreateListTail(&list, 10);
    ListPrint(list);

    ListInsert(&list, 1, 101);
    int val;
    GetElem(list, 11, &val);
    printf("%d\n", val);
    ListPrint(list);

    ListDelete(&list, 10, &val);
    printf("%d\n", val);
    ListPrint(list);
    return 0;
}

// 頭插法
void CreateListHead(LinkedList * L, int n){
    LinkedList p;
    int i;
    srand(time(0));

    *L = (LinkedList)malloc(sizeof(Node));
    (*L)->next = NULL;
    for (int i = 0; i < n; i++)
    {
        p = (LinkedList)malloc(sizeof(Node));
        p->data = rand() % 100 + 1;
        p->next = (*L)->next;
        (*L)->next = p;
    }
}

// 尾插法
void CreateListTail(LinkedList * L, int n){
    LinkedList p,r;
    int i;
    srand(time(0));

    * L = (LinkedList)malloc(sizeof(Node));
    r = *L;
    for (int i = 0; i < n; i++) {
        p = (LinkedList)malloc(sizeof(Node));
        p->data = rand() % 100 + 1;
        r->next = p;
        r = p;
    }
    r->next = NULL;
}

Status ClearList(LinkedList * L){
    LinkedList p,q;
    p = (*L)->next;
    while (p)
    {
        q = p->next;
        free(p);
        p = q;
    }

    (*L)->next=NULL;
    return OK;
}

Status GetElem(LinkedList L, int i, ElemType * e){
    int j;
    LinkedList p = L->next;
    j = 1;
    while (p && j < i)
    {
        p = p->next;
        j++;
    }

    if(!p || j > i){
        return ERROR;
    }

    *e = p->data;
    return OK;
}

Status ListInsert(LinkedList * L, int i, ElemType e){
    int j;
    LinkedList p,s;

    p  = * L;
    j = 1;
    while (p && j < i)
    {
        p = p->next;
        j++;
    }

    if(!p || j > i){
        return ERROR;
    }

    s = (LinkedList)malloc(sizeof(Node));
    s->data = e;
    s->next = p->next;
    p->next = s;

    return OK;
}

Status ListDelete(LinkedList * L, int i, ElemType * e){
    int j;
    LinkedList p,q;

    p  = * L;
    j = 1;
    while (p && j < i)
    {
        p = p->next;
        j++;
    }

    if(!(p->next) || j > i){
        return ERROR;
    }

    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);

    return OK;
}

void ListPrint(LinkedList L){
    LinkedList p = L->next;
    while (p)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缔刹,一起剝皮案震驚了整個濱河市惧磺,隨后出現(xiàn)的幾起案子雳刺,更是在濱河造成了極大的恐慌驳规,老刑警劉巖寥闪,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件水孩,死亡現(xiàn)場離奇詭異蓝角,居然都是意外死亡昌罩,警方通過查閱死者的電腦和手機哭懈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茎用,“玉大人遣总,你說我怎么就攤上這事」旃Γ” “怎么了旭斥?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長古涧。 經(jīng)常有香客問我垂券,道長,這世上最難降的妖魔是什么蒿褂? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任圆米,我火速辦了婚禮,結(jié)果婚禮上啄栓,老公的妹妹穿的比我還像新娘娄帖。我一直安慰自己,他們只是感情好昙楚,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布近速。 她就那樣靜靜地躺著,像睡著了一般堪旧。 火紅的嫁衣襯著肌膚如雪削葱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天淳梦,我揣著相機與錄音析砸,去河邊找鬼。 笑死爆袍,一個胖子當(dāng)著我的面吹牛首繁,可吹牛的內(nèi)容都是我干的作郭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弦疮,長吁一口氣:“原來是場噩夢啊……” “哼夹攒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胁塞,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咏尝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啸罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體编检,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年伺糠,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒙谓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡训桶,死狀恐怖累驮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舵揭,我是刑警寧澤谤专,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站午绳,受9級特大地震影響置侍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拦焚,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一蜡坊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赎败,春花似錦秕衙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搞糕,卻和暖如春勇吊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窍仰。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工汉规, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驹吮。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓针史,卻偏偏與公主長得像膏燕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悟民,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354