链表
1。是由结构体和指针构成的。
2。包括两个部分一个是数据域和指针域。
3。链表中的结点分为两类:头结点和一般结点。头结点是没有数据域的。
4。基本操作有:初始化链表,增加结点和删除结点,求链表的长度等等。
struct Linknode{
int data;
struct Linknode *next;
};
这个地方有个知识点:这个是链表的数据结构是有结构体和指针构成。结构体名为Linknode.但这里面没有定义结构体变量,只有我们定义了结构体变量才能使用结构体。
结构体变量怎么定义呢?
有两种方式:
1。struct Linknode Linklist;
2.typedef struct linknode Linklist.
一般我们都希望采用第2种,这样的好处是: 当我们再定义结构体变量时,可以用:Linklist p;而如果我们采用第一种还必须采用 struct Linknode p;对比一下就可以知道第2种要简单很多。那么下面我们都采用第2种方式来定义结构体变量。
上面我们已经定义了一个链表:
1。初始化链表。
#include<stdio.h>
#include<stdlib.h>
int InitLinkList(Linklist **Lnode)
{
*Lnode=(Linklist)malloc(sizeof(Linklist));//*Lnode等于L,对与*Lnode的分配空间相当与对主函数中的L分配空间。
if(!*Lnode)
return 0;
(*Lnode)->next=NULL;
}
在初始化链表的时候,我们用到了2级指针为什么呢?因为我们希望在InitLinkList函数生成的头结点,主函数中也能指向这个头结点。如果我们用一级指针的话,用malloc分配空间的时候,它将会返回分配空间的首地址给指针变量Lnode,而不能使是的空间被主函数中指针变量L得到这个地址。所以我们要用2级指针。
void main()
{
Linklist *L;
InitLikList(&L);
}
2。增加链表结点
增加链表结点其实很简单,一般用到三个结构体指针变量和一个循环结构。
InsertLinkList(Linklist *Lnode)
{
Linklist *p,*q;
int d;
{
scanf("%d",&d);
if(d==-9999)
break;
p=Lnode->next;//p指向头结点
//通过while循环和指针变量p定位要插入的结点q的位置。
while(p)
p=p->next;
//生成一个要插入的结点
q=(Linklist)malloc(sizeof(Linklist));//申请要插入的结点空间
q->data=d;//填充要插入结点的数据域
q->next=p->next;//首先填充要插入结点q的指针域进行填充。
p->next=q;//然后把定位好的p指针域进行修改指向q.
}while(9);//循环退出的条件是输入的数据-9999
}
void main()
{
Linklist *L;
InitLinkList(&L);//生成一个头结点
InsertLinkList(L);//插入结点
}
3。求链表的长度:
int LengthLinkList(Linklist *Lnode)
{
int i=0;
Linklist *p;
p=Lnode->next;//p指向链表的第一个结点。
while(p)
{
i++;
p=p->next;
}
return i;
}
void main()
{
Linklist *L;
InitLinkList(&L);//生成一个头结点
InsertLinkList(L);//插入一个结点
LengthLinkList(L)//求链表的长度。
}
4.删除结点
删除链表结点其实很简单,一般用到三个结构体指针变量和一个循环结构。
DestroyLinkList(Linklist *Lnode)
{
Linklist *p,*q;
p=Lnode;//p指向链表的头结点
while(p)
{
q=p->next;//q指向当前结点的下一个结点。
free(p);//释放当前结点
p=q;//p指向下一个结点
}
}
void main()
{
Linklist *L;
InitLinkList(&L);//生成一个头结点
InsertLinkList(L);//插入结点
LengthLinkList(L)//求链表的长度。
DestroyLinkList(L);//删除链表结点
}
单链表这块内容只要你掌握好了基本的知识点,一切问题都OK了,这基本的知识点有:结构体变量,结构体指针变量,头结点和一般结点,数据域和指针域,while循环。
相关推荐
在C语言中,XX管理系统的设计通常涉及到数据结构和算法的应用,结构体和链表是常见的数据组织方式。然而,这个特殊的管理系统实现表明,即使不使用结构体和链表,也可以达到管理数据的目的。这通常意味着可能采用了...
### C语言结构体链表的排序方法:选择排序与插入排序 在计算机科学领域,数据结构与算法的设计是实现高效程序的关键。对于链表这种基本的数据结构而言,掌握其排序方法至关重要。本文将深入探讨两种常用的链表排序...
C 语言指针和结构体链表详解 本资源主要讲解了 C 语言中的指针和结构体链表的概念和应用。结构体链表是一种重要的动态数据结构,具有动态性和灵活性,能够根据需要增加或减少元素个数,并且元素的位置可以变化。...
C语言结构体链表精品课件 本资源的主要内容是C语言中结构体和链表的应用。结构体是一种构造类型,由若干成员组成,每一个成员可以是一个基本数据类型或者又是一个构造类型。结构体是用户定义的数据类型,可以满足...
重点阐述数据结构: 结构体与链表,深入详解数据结构。
结构体与链表的课件,供小白使用,其中包括有链表的创建,链表节点的插入,节点的删除,链表的展示。不过其中讲解得有些大概,需要有一定的c语言基础,及对指针有一定的了解。
当需要管理多个学生时,可以使用链表来存储这些结构体,形成一个学生链表。 链表节点可以包含结构体类型的变量,这样每个节点就代表一个学生的信息。例如,我们可以定义一个节点结构体`node`,其中包含一个`student...
c语言汽车销售查询系统 包含结构体、链表
【C语言培训 指针 数组 结构体 链表】 C语言是一种强大的、低级别的编程语言,被广泛用于系统开发、嵌入式编程以及各种软件开发中。掌握C语言的关键在于理解和运用指针、数组、结构体和链表等核心概念。 **一、...
在IT领域,结构体和链表是数据结构与算法中的基础概念,对于任何软件开发者,尤其是初学者,理解和掌握它们至关重要。在这个“结构体与函数、创建链表课堂举例”中,我们将深入探讨这两个主题。 首先,我们来看...
这个系统利用了结构体链表来存储商品信息,并提供了文件读入/读出功能,可以进行数据的持久化存储。此外,它还实现了商品的排序和搜索功能,这在实际应用中是非常关键的。 首先,让我们从“结构体链表”开始。在C++...
用〈〈数据结构〉〉中的顺序表或链表作数据结构,结合C语言基本知识。编写一个图书销售系统。以把所学数据结构知识应用到实际软件开发中去。 任务: 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、...
本篇将深入探讨结构体的定义、使用以及与链表相关的操作,如插入和删除节点。 首先,我们来理解什么是结构体。在C/C++中,你可以通过`struct`关键字定义一个新的数据类型,然后在这个类型中包含各种不同的成员,...
如资源名,用c实现了基于结构体的循环链表。
本篇文章将深入探讨单向链表的基本概念,包括其结构体定义、如何创建链表以及如何遍历链表。 首先,我们来理解链表的结构。在C语言中,单向链表通常用结构体来表示。结构体包含两个部分:数据域,用于存储实际的...
在C语言中,结构体(struct)是一种复合数据类型,它允许我们将多个不同类型的变量组合成一个单一的实体。在本篇文章中,我们将深入探讨结构体的定义、声明、初始化,以及如何通过指针和数组操作结构体,还将讨论...
在本示例中,我们关注的是“LianBiao.rar_lianbiao_结构体_链表 插入”,这表明我们将讨论如何实现一个链表类,该类能够处理特定结构体,并支持插入操作。让我们深入探讨链表的基本概念,结构体的使用,以及如何在...
"C语言结构体与链表" 本章主要讲解C语言中的结构体类型和链表处理。结构体类型是一种构造数据类型,用于将不同类型的数据组合成一个整体,是自定义数据类型的重要形式。链表处理是程序设计中常用的数据结构,用于...
c语言结构体及链表!!
本教程将详细讲解如何利用结构体来实现链表,并提供免费下载资源。以下是对相关知识点的详细说明: 1. **结构体类型定义与使用**: 结构体是C语言中一种复合数据类型,它可以将不同类型的数据组合在一起。例如,`...