单向链表(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;
}

 

 

 

posted @ 2020-09-20 13:24  焕不涣  阅读(233)  评论(0编辑  收藏  举报