龙空技术网

怎样用C语言创建单向链表? 并且实现链表的插入与删除

烦人的星辰 254

前言:

此刻你们对“c语言创建链表并输入数据”大约比较重视,咱们都想要分析一些“c语言创建链表并输入数据”的相关文章。那么小编也在网摘上网罗了一些有关“c语言创建链表并输入数据””的相关文章,希望你们能喜欢,大家一起来学习一下吧!

#暑期创作大赛#

用C语言创建单向链表,并且实现链表的插入与删除

#include <stdio.h>#include <stdlib.h>struct LinkNode{    int data;    struct LinkNode *next;}; typedef struct LinkNode *Lnode;struct LinkList{    Lnode pHeader;  //头节点    int m_Size;  //长度};typedef struct LinkList *Llist;// 初始化链表Llist init_list(){    Llist l1 = malloc(sizeof(struct LinkList));        if (l1 == NULL)        printf("内存分配失败");    l1->pHeader = malloc(sizeof(struct LinkNode));    l1->pHeader->data = 0;    l1->pHeader->next = NULL;    l1->m_Size = 0;    return l1;}// 插入元素void insert(Llist list, int p, int data){    int i = 0;    if((p < 0) || (p > list->m_Size))        p = list->m_Size;    Lnode q = list->pHeader;    for (i = 0; i < p; ++i)    {        q = q->next;    }    Lnode new_node = malloc(sizeof(struct LinkNode));    if(new_node == NULL)        printf("内存分配失败");    new_node->next = q->next;    new_node->data = data;    q->next = new_node;    list->m_Size++;} // 遍历链表void travel(Llist list){    Lnode q = list->pHeader;    printf("链表内容为: ");    while(q->next != NULL)    {                q = q->next;        printf("%d ", q->data);    }    printf("\n");}// 删除元素void delete(Llist list, int p){    int i = 0;    if((p < 0) || (p >= list->m_Size))    {        printf("节点%d不存在\n", p);        return;    }    Lnode q = list->pHeader;    for (i = 0; i < (p-1); ++i)    {            q = q->next;        }    Lnode qDel = q->next;    q->next = qDel->next;    free(qDel);    qDel = NULL;    list->m_Size -= 1;}// 清空链表void clear(Llist list){    int i = 0;    Lnode q = list->pHeader->next;    for (i = 0; i < list->m_Size; ++i)    {        Lnode p = q->next;        free(q);        q = p;    }    list->pHeader->next = NULL;    list->m_Size = 0;}int main(int argc, char const *argv[]){    Llist L;    L = init_list();    printf("链表头地址为%p\n", L);        // 插入元素    insert(L, 0, 35);    insert(L, 1, 0);    insert(L, 2 , 9);    insert(L, 3, 13);    travel(L);    // 删除元素    delete(L, 2);    delete(L, 15);    travel(L);    // 清空链表    clear(L);    travel(L);        return 0;}

标签: #c语言创建链表并输入数据