ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言数据结构_链表实例分析

2022-01-27 09:03:20  阅读:132  来源: 互联网

标签:LinkList 结点 C语言 删除 list next 链表 数据结构


编写一个程序,要求:从终端输入一组整数(大于10个数),以0作为结束标志,将这一组整数存放在一个链表中(结束标志0不包括在内),打印出该链表中的值。然后删除该链表中的第5个元素,打印出删除后的结果。最后再内存中释放掉改内存。

#include "stdio.h"

typedef int ElemType;

typedef struct node{
    ElemType data;      //数据域
    struct node *next;      //指针域
}LNode, *LinkList;

LinkList GreatLinkList(int n){
    //创建一个链表,包含n个结点
    LinkList p, r, list=NULL;
    ElemType e;
    int i;
    for(i=1; i<=n; i++){
        scanf("%d", &e);            //输入结点的内容
        p=(LinkList)malloc(sizeof(LNode));      //为新建的结点开辟内存空间
        p->data=e;                      //元素赋值
        p->next=NULL;
        if(!list)
            list=p;                 //赋值链表头指针
        else
            r->next=p;              //将结点连入链表
        r=p;
    }
    return list;                    //返回链表头指针
}

void insertList(LinkList *list, LinkList q, ElemType e){
    //向链表中插入结点
    LinkList p;
    p=( LinkList)malloc(sizeof(LNode) );        //为新建的结点开辟内存空间
    p->data=e;                      //元素赋值
    if(!*list){
        *list=p;
        p->next=NULL;
    }
    else {                           //将结点连入链表
        p->next=q->next;
        q->next=p;
    }
}


void delLink(LinkList *list, LinkList q) {
    //删除链表的某结点
    LinkList r;
    if(q==list){                        //如果删除第一个结点
        *list=q->next;
        free(q);
    }
    else{
        for(r=*list; r->next != q; r=r->next);
        if(r->next != NULL){
            r->next=q->next;
            free(q);
        }
    }
}

void destroyLinkList(LinkList *list){
    //销毁一个链表
    LinkList p, q;
    p= *list;
    while(p) {
        //循环释放掉每一个链表结点
        q=p->next;
        free(p);
        p=q;
    }
    *list=NULL;
}

main()
{
    int e, i;
    LinkList l, q;
    q=l=GreatLinkList(i);       //创建一个链表结点,q和l指向该结点
    scanf("%d", &e);
    while(e)            //循环地输入数据,同时插入新生成的结点
    {
        insertList(&l, q, e);
        q=q->next;
        scanf("%d", &e);
    }
    q=l;
    printf("The content of the linklist\n");
    while(q)                    //输出链表中的内容
    {
        printf("%d ", q->data);
        q=q->next;
    }
    q=l;
    printf("\nDelete the fifth element\n");
    for(i=0; i<4; i++)          //将指针q指向链表的第5个元素
    {
        q=q->next;
    }
    delLink(&l, q);     //删除q所指的结点
    q=l;
    while(q)            //打印出删除后的结果
    {
        printf("%d ", q->data);
        q=q->next;
    }
    destroyLinkList(&l);            //释放掉该链表
    getche();				//该函数一般在Linux中使用
}

程序内容:

1、应用函数GreatLinkList()创建一个只含有1个结点的链表,并向该结点中输入数据

2、然后通过函数insertList()向链表中插入新的结点,在插入结点的同时插入数据,直到输入0为止。数据从键盘输入

3、然后打印出该链表中的数据。再通过循环使指针q指向该链表的第5个元素,调用函数delLink()删除q所指的结点,打印出删除元素后链表中的值。

4、最后调用destroyLinkList()函数释放掉链表所占据的内存空间。

标签:LinkList,结点,C语言,删除,list,next,链表,数据结构
来源: https://www.cnblogs.com/zonkidd/p/15848422.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有