1. 程式人生 > 實用技巧 >單向連結串列(C語言)

單向連結串列(C語言)

單向連結串列

  一:建立以及初始化:

typedef struct node {
    int elem;
    struct node* next;
}DataNode;
​
typedef struct {
    int count;
    DataNode* next;
}*LinkHead,LinkNode;
​
int Init(LinkHead* L) {//傳進來的引數要是有指標符號,那麼下面在設變數的時候就不用*
    LinkHead p = (LinkHead)malloc(sizeof(LinkHead));
    DataNode* q = (DataNode*)malloc
(sizeof(DataNode)); q->next = NULL; ​ p ->count = 0; p->next = q;//表中的元素初始化 (*L) = p; return 0; }

二:插入操作:

int Insert(LinkHead* L, int elem, int pos) {
    if (pos<1 || pos>(*L)->count + 1) {
        return -1;
    }
​
    DataNode* q = (DataNode*)malloc(sizeof(DataNode));//
新建一個元素 q->elem = elem; ​ DataNode* p = (*L)->next;//將表中的所有元素提取出來 for (int i = 1; i < pos; i++) { p = p->next;//直到插入的那個元素的位置,之前所有元素遍歷(很重要)為了下面方便操作,所以將元素遍歷到那個元素的位置,以後就按照這個模式遍歷就好 } ​ q->next = p->next;//把將要插入元素位置的後面所有元素賦值到q->next中暫時儲存起來,而在q中已經儲存進去了那個新元素,那就是第一個elem中
p->next = q;//將插入元素後面的東西再插入進去 (*L)->count += 1; return 0; }

三:刪除操作:

int Delete(LinkHead* L, int pos) {
    if (pos<1 || pos>(*L)->count + 1)
        return -1;
​
    DataNode* p = (*L)->next, * q;
    for (int i = 1; i <= pos; i++) {//因為要刪除,所以要空過那個元素,放到後面
        p = p->next;
    }
    q = p->next;
    p->next = q->next;
    free(q);
    (*L)->count -= 1;
    return 0;
}