`

结构体实现单向链表

阅读更多

结构体实现单向链表

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_"表明这是一个关于使用模板类实现单向链表的代码,可能由用户fastchq编写或维护。 单向链表类模板的基本结构通常包括以下几个部分: 1. **节点定义**:首先,我们需要...

    C/C++实现单向链表

    本项目中,我们分别使用C语言和C++语言实现了单向链表的几个核心功能,包括创建链表、插入数据、获取指定位置的数据以及删除指定位置的数据。以下是对这些操作的详细说明: 1. **链表节点结构**: 链表由一系列...

    C语言实现的单向链表和双向链表

    本主题将深入探讨由C语言实现的单向链表(slist.h)和双向链表(blist)。这两种链表各有特点,适用于不同的场景,对于理解和掌握数据结构与算法至关重要。 ### 单向链表(slist.h) 单向链表是一种线性数据结构,...

    C语言实现单向链表的创建、插入,删除节点,和2个链表合并

    本文将详细讲解如何使用C语言在Microsoft Visual C++ 6.0环境下实现单向链表的创建、插入、删除节点以及两个链表的合并。 一、单向链表的基本概念 单向链表是一种线性数据结构,每个元素(称为节点)包含两部分:...

    结构体与链表 ppt课件

    链表可以是单向链表(每个节点仅有一个指向前一个节点的指针)或双向链表(每个节点有两个指针,分别指向前一个和后一个节点)。 链表的主要操作包括插入节点、删除节点、遍历链表和查找特定节点等。由于链表的动态...

    实现单向链表Singlelist

    在这个单向链表实现中,函数指针可能被用来表示对链表操作的函数,如插入、删除或查找节点。例如,可以定义一个通用的操作函数,接受一个函数指针作为参数,根据传入的函数来执行相应的操作: ```c void perform...

    C语言实现的一个单向链表逆转

    在C语言中,单向链表的逆转可以通过递归方法来实现。递归是一种编程技巧,它通过函数调用自身来解决问题。在这个问题中,递归可以用于逐个处理链表的节点,直到达到链表的末尾,然后逐步回溯并调整链表的连接关系。 ...

    单向链表c语言实现数据结构

    要实现单向链表,我们首先需要定义一个结构体来表示链表节点。这个结构体通常包含一个数据域(用于存储元素)和一个指向下一个节点的指针域: ```c typedef struct Node { int data; // 数据域,这里假设我们存储...

    C语言单向建立链表的代码实现

    本文将详细介绍如何使用C语言实现单向链表的创建、输入和输出。 #### 单向链表的基本概念 单向链表是一种线性表,其中每个元素(节点)包含一个数据域和一个指向其后继节点的指针域。单向链表的主要特点是节点只能...

    c语言实现单向链表.

    本文将深入探讨如何使用C语言来实现单向链表,并扩展到实现双向链表的“增删改查显”功能。 首先,让我们了解链表的基本概念。链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个链表节点包含两...

    单向链表的操作____

    创建一个单向链表首先需要定义一个结构体来表示链表节点,通常称为`struct Node`。这个结构体包含两个字段,一个是数据字段,另一个是指针字段。例如: ```c typedef struct Node { int data; struct Node* next;...

    单向链表实现

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表不连续存储元素,而是通过节点之间的指针连接。每个节点包含两部分:数据域,用于存储数据;指针域,指向下一个节点的位置。...

    QT代码实现list链表结构

    1. **单向链表实现** - 定义节点类`Node`,包含数据成员和指向下一个节点的指针。 - 创建头节点,初始化为空。 - 实现插入、删除、遍历等基本操作。例如,插入节点时需要更新前后节点的指针,删除节点时需找到前...

    单向链表结点的逐个删除-C语言教程

    本文将详细介绍如何使用C语言实现单向链表结点的逐个删除。 首先,我们要了解单向链表的基本概念。单向链表是由一系列节点组成的线性结构,每个节点包含两部分:数据域和指针域。数据域存储着节点的数据信息,而...

    单向链表逆转单向链表逆转单向链表逆转

    "单向链表逆转" 在计算机科学中,链表是一种基本的数据结构,它是一种动态的数据结构,可以存储大量的数据。单向链表是一种特殊的链表,每个结点只有一个指针,指向下一个结点。单向链表逆转是指将链表的结点顺序...

    结构体与函数、创建链表课堂举例

    链表主要有单向链表和双向链表两种类型。这里我们关注单向链表的创建。 创建链表的第一步是定义链表节点的结构体,通常包含数据域和指针域: ```cpp struct Node { int data; struct Node* next; }; ``` 然后,...

    单向链表的实现 c语言

    在C语言中实现单向链表涉及创建结构体定义节点、初始化链表、插入节点、删除节点以及遍历链表等操作。下面我们将详细探讨这些知识点。 首先,我们需要定义一个结构体来表示链表的节点。这个结构体通常包含两个部分...

    用C语言结构体类型指针实现数据结构链表操作.pdf

    单向链表是最简单的链表类型,其中每个节点包含数据和一个指向下一个节点的指针,最后一个节点指向NULL表示链表结束。 在实现链表时,需要定义链表节点的结构体类型,然后创建链表节点的变量,并通过指针将节点链接...

Global site tag (gtag.js) - Google Analytics