`

结构体实现单向链表

阅读更多

结构体实现单向链表

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 ;

}

 

分享到:
评论

相关推荐

    单向链表(一) 结构体、创建链表、遍历链表

    单向链表(一) 结构体、创建链表、遍历链表

    数据结构:单向循环链表源码

    数据结构:单向循环链表源码,为了让读者有更好的体验,把源码上传上去,有任何问题,或者有任何bug可以直接私信我,我会及时回复,并且解决对应问题

    QT代码实现list链表结构

    QT代码实现list链表结构,资源中包含单向链表和双向链表

    单向循环链表解决约瑟夫问题

    用单向循环链表解决约瑟夫问题。使用c++语言,结构体,链表的操作。

    指针、引用、结构体、线性表(顺序表、单向链表)

    (2)定义一个结构体类型student,写一个函数,根据学号或者成绩,对包含有n个学生的结构体数组进行排序,学生的结构体至少包括3个成员(学号,姓名,入学分数等),比较结构体变量的大小时,可以根据其学号或者分数...

    用c语言编写的计算器

    用C语言编写的一个计算器,支持四则混合运算,方便进行功能扩展,如加幂运算、三角函数运算等。 实现技术:结构体、单向链表、递归算法等 有源代码Calculator.c和可执行文件Calculator.exe

    用C++类实现单向链表的增删查和反转操作方法

    数据结构这东西,理解起来不算难,但是实现难度就不小了,虽然思路很清晰,但不知道从何下手还有语言的细节问题一直是阻碍初学者的主要障碍(比如我)。今天用了一下午时间终于独立完成了链表操作。 找网上的代码,...

    单向链表的补充完全版,具有更多可调用的基本函数

    对应的严书的数据结构的算法2.19。 前面介绍的线性链表结构较简单,还不能满足实际应用的需要。其主要存在 3 个问 ...重新定义的线性链表类型,LinkList 类型增加了尾指针和表长 2 个成员,成为结构体类 型。

    python数据结构链表之单向链表(实例讲解)

    下面小编就为大家带来一篇python数据结构链表之单向链表(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    纯C语言实现的通用链表(类)源代码

    纯C语言实现的通用链表(类)源代码 纯C语言代码实现的通用链表(类)源代码,可在bc++、tc,tc++等这些老古董编译器以及gcc、vc6.0、vc...本链表为单向链表,非常有效。可以用作队列,堆栈等一些非常有用的数据结构。

    C语言实现单链表逆序与逆序输出实例

    主要介绍了C语言实现单链表逆序与逆序输出,是数据结构与算法中比较基础的重要内容,有必要加以牢固掌握,需要的朋友可以参考下

    学生成绩管理系统 附源码(C语言实现)

    使用C语言写的学生成绩管理系统,功能较齐全,经测试没有bug,使用单向链表,结构体实现

    C语言复习PPT计算机二级

    用typedef说明一个新类型 (2)结构体与共用体类型数据的定义和成员的引用 (3)通过结构体构成链表、单向链表的建立、结点数据的输出、删除与插入

    danxianglianbiao.rar_Score!

    //建立一个单向链表。输入一个学生的学号num,姓名name和成绩score,查找链表中 //是否有学号为num的结点,若找到,则删除改节点,否则按学号顺序将该学生的信息 //插入链表中。最后输出链表中各结点的数据。 //提示...

    C语言 数据结构之单链表基本操作

    单链表的各种操作,适合于初学,也适合于复习 单链表操作介绍 1. 创建头节点 2. 创建有数据节点 3. 判断链表是否为空 ...13. 已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序,要求用递归方法

    tushuguanguanli.rar_Book 2

    1)所有信息存储在一个带头结点的单向链表中,每个结点存储一条图书记录,即结构体(book),其中各域为:书号(number)、书名(title)、作者(writer)、定价(pricing)、出版社(publishinghouse),指针域(next)。...

    用c编的学生管理系统

    实现 增 删 查 改 的单向链表用c语言编写的,分为两个结构体

    red hat c 编写的结构体通讯录

    系统函数的在red hat 下c编程基本的应用 1、 通讯录采用struct定义结构; 2、 通讯录数据使用malloc动态分配内存,而不要使用静态数组;...3、 尽量把通讯录列表建成一种单向链表的形式,提高新增和删除的效率。

    程序设计基础2.docx

    吉林大学计算机软件学院C语言平时上机实验的参考代码,要求记录每个学生的信息,信息卡片包括学号、姓名和成绩三项从文件中读取数据,并创建学生信息的结构体...使得该单向链表的节点能够满足学号从小到大的顺序排列

    c++数据结构预算法之单项链表

    数据结构与算法第一课,c++单项链表,用struct结构体做的小程序

Global site tag (gtag.js) - Google Analytics