当前位置:   article > 正文

C语言基础入门:链表详解篇_链表c语言

链表c语言

链表概述

  链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:

一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

 

  链表的各类操作包括:学习单向链表的创建、删除、 插入(无序、有序)、输出、 排序(选择、插入、冒泡)、反序等等。

基本操作

1. 节点的构造

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#defineLEN sizeof(struct stu)structstu{

//数据char num[10];char name[20];float score;

//指针structstu*next;};

2.  建立链表

struct stu *create(){

/structstu*head;structstu*p1, *p2;

head = (struct stu *)malloc(LEN);    head->next =NULL;

p1 = head;

p2 = (struct stu *)malloc(LEN);

printf("输入个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p2->num, p2->name, &p2->score);    getchar();

while(strcmp(p2->num,"0") !=0){/*

执行结束后

 

1。p2的next域为NULL.

 2。第一个节点的next域指向第二个节点的数据域

3。p1指针指向第二个节点的数据域

p2->next = p1->next;        p1->next = p2;        p1 = p2;

p2 = (struct stu *)malloc(LEN);printf("输入个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p2->num, p2->name, &p2->score);        getchar();    }

free(p2);returnhead;};

3. 输出链表

void print(struct stu * head){structstu*p;

printf("num name score\n");    p = head->next;

while(p!=NULL){

printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);   

 p=p->next;    }}

4. 插入节点

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

void insert(struct stu * head, struct stu * p0)

{    struct stu *p1, *p2;    p1 = head->next;p2 = head;

while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))

{p2=p1;    p1=p1->next;    } p0->next = p2->next;    p2->next = p0;}

5. 删除节点

int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;

 while(p1!=NULL&&strcmp(num, p1->num)!=0)

{        p2=p1;        p1=p1->next;    }

 if(!p1){return0;    }

 p2->next = p1->next;free(p1);return1;}

6. 主函数

 

//主函数int main()

{structstu*h, *p0;charnum[10];printf("建立链表\n");  

  h = create();    p0 = (struct stu *)malloc(LEN);

printf("输入待插入的个人信息:学籍号、姓名和总成绩\n");

scanf("%s%s%f",p0->num, p0->name, &p0->score);   

 getchar();if(strcmp(p0->num,"0") !=0){        insert(h, p0);    }

printf("输入待删除个人信息的学号\n");

scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);   

 }printf("输出链表\n");    print(h);return0;}

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/596704
推荐阅读
相关标签
  

闽ICP备14008679号