结构体实现单向链表
1.定义一个结构体
#include<iostream> #include<cstdlib> using namespace std ; #define LEN (sizeof(struct student)) struct student{ int num ; float score ; struct student *next ; }; //定义全局变量,记录链表中所含节点个数 int n ;
2.创建一个链表
/** 创建一个链表 */ struct student *creat(void){ struct student*p1,*p2,*head; n=0 ; p1=(struct student*)malloc(LEN) ; p2 = p1 ; head = NULL ; cin>>p1->num>>p1->score ; while(p1->num!=0) { n = n+1 ; if(n==1) head = p1 ; else p2->next = p1 ; p2 = p1 ; p1 = (struct student*)malloc(LEN) ; cin>>p1->num>>p1->score ; } p2->next = NULL ; return head ; }
3.输出链表
/** 输出链表 */ void print(struct student *head) { struct student *p0 ; p0 = head ; while(head!=NULL) { cout<<"学号"<<p0->num<<" 分数"<<p0->score<<endl ; p0 = p0->next ; if(p0==NULL) break ; } }
4.删除节点
/**
删除节点
*/
struct student *del(struct student *head,long num)
{
struct student *p1,*p2;
p1= head ;
while(p1->num!=num)//找到了
{ p2 = p1 ;
p1=p1->next ;
if(p1==NULL)
{
cout<<num<<"没找到"<<endl ;
return head ;
}
}
if(p1==head) head = head->next ;
else{ p2->next = p1->next ;}
cout<<"已删除"<<num<<endl ;
free(p1) ;
n = n-1 ;
return head ;
}
5.插入节点
/**
插入节点
*/
struct student *Insert(struct student *head,struct student *stu)
{
struct student *p1,*p2 ;
p1 = head ;
if(head==NULL)
{
head = stu ;
stu->next = NULL ;
}else{
while((p1->num<stu->num)&&(p1->next!=NULL))
{
p2 = p1 ;
p1 = p1->next ;
}
if(p1->num>stu->num)
{
if(p1==head) head = stu;
else p2->next = stu ;
stu->next = p1 ;
}else
{
p1->next = stu ;
stu ->next = NULL ;
}
}
n = n+1 ;
cout<<"已插入"<<endl ;
return head ;
};
6.对链表的综合操作
int main() { struct student *head,*stu ; long del_num ; stu =(struct student*)malloc(LEN) ; cout<<"请输入!!!"<<endl; head = creat(); print(head) ; cout<<"请输入要删除的元素!!!"<<endl ; cin>>del_num ; head = del(head,del_num) ; print(head) ; cout<<"请输入要插入的元素!!!"<<endl ; cin>>stu->num>>stu->score ; head = Insert(head,stu) ; print(head) ; return 0 ; }
相关推荐
本篇文章将深入探讨单向链表的基本概念,包括其结构体定义、如何创建链表以及如何遍历链表。 首先,我们来理解链表的结构。在C语言中,单向链表通常用结构体来表示。结构体包含两个部分:数据域,用于存储实际的...
与普通单向链表不同,循环链表的最后一个节点的指针不是空的,而是指向链表的第一个节点,形成一个闭合的环。这种设计使得遍历链表更为方便,因为没有明显的"结束"标志。 **单向循环链表特性** 1. **无头结点**:与...
标题"单向链表类模板_单向链表类模板_fastchq_"表明这是一个关于使用模板类实现单向链表的代码,可能由用户fastchq编写或维护。 单向链表类模板的基本结构通常包括以下几个部分: 1. **节点定义**:首先,我们需要...
本项目中,我们分别使用C语言和C++语言实现了单向链表的几个核心功能,包括创建链表、插入数据、获取指定位置的数据以及删除指定位置的数据。以下是对这些操作的详细说明: 1. **链表节点结构**: 链表由一系列...
本主题将深入探讨由C语言实现的单向链表(slist.h)和双向链表(blist)。这两种链表各有特点,适用于不同的场景,对于理解和掌握数据结构与算法至关重要。 ### 单向链表(slist.h) 单向链表是一种线性数据结构,...
本文将详细讲解如何使用C语言在Microsoft Visual C++ 6.0环境下实现单向链表的创建、插入、删除节点以及两个链表的合并。 一、单向链表的基本概念 单向链表是一种线性数据结构,每个元素(称为节点)包含两部分:...
链表可以是单向链表(每个节点仅有一个指向前一个节点的指针)或双向链表(每个节点有两个指针,分别指向前一个和后一个节点)。 链表的主要操作包括插入节点、删除节点、遍历链表和查找特定节点等。由于链表的动态...
在这个单向链表实现中,函数指针可能被用来表示对链表操作的函数,如插入、删除或查找节点。例如,可以定义一个通用的操作函数,接受一个函数指针作为参数,根据传入的函数来执行相应的操作: ```c void perform...
在C语言中,单向链表的逆转可以通过递归方法来实现。递归是一种编程技巧,它通过函数调用自身来解决问题。在这个问题中,递归可以用于逐个处理链表的节点,直到达到链表的末尾,然后逐步回溯并调整链表的连接关系。 ...
要实现单向链表,我们首先需要定义一个结构体来表示链表节点。这个结构体通常包含一个数据域(用于存储元素)和一个指向下一个节点的指针域: ```c typedef struct Node { int data; // 数据域,这里假设我们存储...
本文将详细介绍如何使用C语言实现单向链表的创建、输入和输出。 #### 单向链表的基本概念 单向链表是一种线性表,其中每个元素(节点)包含一个数据域和一个指向其后继节点的指针域。单向链表的主要特点是节点只能...
本文将深入探讨如何使用C语言来实现单向链表,并扩展到实现双向链表的“增删改查显”功能。 首先,让我们了解链表的基本概念。链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个链表节点包含两...
创建一个单向链表首先需要定义一个结构体来表示链表节点,通常称为`struct Node`。这个结构体包含两个字段,一个是数据字段,另一个是指针字段。例如: ```c typedef struct Node { int data; struct Node* next;...
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表不连续存储元素,而是通过节点之间的指针连接。每个节点包含两部分:数据域,用于存储数据;指针域,指向下一个节点的位置。...
1. **单向链表实现** - 定义节点类`Node`,包含数据成员和指向下一个节点的指针。 - 创建头节点,初始化为空。 - 实现插入、删除、遍历等基本操作。例如,插入节点时需要更新前后节点的指针,删除节点时需找到前...
本文将详细介绍如何使用C语言实现单向链表结点的逐个删除。 首先,我们要了解单向链表的基本概念。单向链表是由一系列节点组成的线性结构,每个节点包含两部分:数据域和指针域。数据域存储着节点的数据信息,而...
链表主要有单向链表和双向链表两种类型。这里我们关注单向链表的创建。 创建链表的第一步是定义链表节点的结构体,通常包含数据域和指针域: ```cpp struct Node { int data; struct Node* next; }; ``` 然后,...
在C语言中实现单向链表涉及创建结构体定义节点、初始化链表、插入节点、删除节点以及遍历链表等操作。下面我们将详细探讨这些知识点。 首先,我们需要定义一个结构体来表示链表的节点。这个结构体通常包含两个部分...
单向链表是最简单的链表类型,其中每个节点包含数据和一个指向下一个节点的指针,最后一个节点指向NULL表示链表结束。 在实现链表时,需要定义链表节点的结构体类型,然后创建链表节点的变量,并通过指针将节点链接...
单向链表,也称为单链表,其特点是每个节点只包含一个指向下一个节点的指针。在代码中,我们首先定义了一个`listnode`结构体,它包含了两个成员:`data`和`next`。其中`data`用于存储节点的实际数据,而`next`是一个...