C++链表学习

链表在一定程度上弥补了数组的不足,高效的利用了存储空间。是结构体与指针的结合。

简单链表示例

//简单链表示例
#include <iostream>
using namespace std;
struct student{//建立一个用于创建链表的结构体
    int id;
    char name[20];
    float score;
    student *next;//链表结构体关键
};
void main()
{
   student *head;//创建一个结构体指针用作链表的链表头。
   //根据需要创建结构体成员。
   student stu1={1,"xiaoming",59.5,NULL},stu2={2,"angelababy",61,NULL},stu3={3,"xiaohong",99,NULL};
//建立链表
   head = &stu1;//用指针将结构体串起来
   stu1.next= &stu2;
   stu2.next= &stu3;
   stu3.next= NULL;
}

创建链表的函数

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct student{
    int id;
    char name[20];
    float score;
    student *next;
};
//此函数的作用是自动创建链表,第一输入的是首节点,最后一个是首节点。
student *  createList()
{
    int n;
    student *pstu;
    student *pre=NULL;
    cout<<"请输入节点个数:"<<endl;
    cin>>n;
    while(n)
    {
        pstu = new student;
        cout<<"请输入学号 姓名 成绩"<<endl;
        cin>>pstu->id>>pstu->name>>pstu->score;
        pstu->next=pre;
        pre=pstu;//指针赋值传的是地址
        n--;
    }
    return pstu;
}
void main()
{

}

输出链表的数据

#include <iostream>
using namespace std;
struct student{
    int id;
    char name[20];
    float score;
    student *next;
};
//此函数的作用是自动创建链表,第一输入的是首节点,最后一个是首节点。
student *  createList()
{
    int n;
    student *pstu;
    student *pre=NULL;
    cout<<"请输入节点个数:"<<endl;
    cin>>n;
    while(n)
    {
        pstu = new student;
        cout<<"请输入学号 姓名 成绩"<<endl;
        cin>>pstu->id>>pstu->name>>pstu->score;
        pstu->next=pre;
        pre=pstu;//指针赋值传的是地址
        n--;
    }
    return pstu;
}
//输出链表的数据
void showList(student *head){
    student *p = head;
    while(p!=NULL){
    cout<<p->id<<p->name<<p->score;
    p=p->next;
    }
}
void main()
{
    student *p ;
   p =createList();
   showList(p);
}

节点的插入

#include <iostream>
using namespace std;
struct student{
    int id;
    char name[20];
    float score;
    student *next;
};
//此函数的作用是自动创建链表,第一输入的是首节点,最后一个是首节点。
student *  createList()
{
    int n;
    student *pstu;
    student *pre=NULL;
    cout<<"请输入节点个数:"<<endl;
    cin>>n;
    while(n)
    {
        pstu = new student;
        cout<<"请输入学号 姓名 成绩"<<endl;
        cin>>pstu->id>>pstu->name>>pstu->score;
        pstu->next=pre;
        pre=pstu;//指针赋值传的是地址
        n--;
    }
    return pstu;
}
//输出链表的数据
void showList(student *head){
    student *p = head;
    while(p!=NULL){
    cout<<p->id<<p->name<<p->score;
    p=p->next;
    }
}
//插入链表节点函数,仔细理解。
void insert(student *head ,student *insert){
    student *temp = head->next;
    if(head==NULL){
        head->next=insert;
    }
    head->next= insert;
    insert->next= temp;
}
void main()
{
   student *p ;
   p =createList();
   //创建一个用于插入的节点
   student cha= {12,"insert",122,NULL};
   insert(p,&cha);
   showList(p);
}

删除链表节点

#include <iostream>
using namespace std;
struct student{
    int id;
    char name[20];
    float score;
    student *next;
};
//此函数的作用是自动创建链表,第一输入的是首节点,最后一个是首节点。
student *  createList()
{
    int n;
    student *pstu;
    student *pre=NULL;
    cout<<"请输入节点个数:"<<endl;
    cin>>n;
    while(n)
    {
        pstu = new student;
        cout<<"请输入学号 姓名 成绩"<<endl;
        cin>>pstu->id>>pstu->name>>pstu->score;
        pstu->next=pre;
        pre=pstu;//指针赋值传的是地址
        n--;
    }
    return pstu;
}
//输出链表的数据
void showList(student *head){
    student *p = head;
    while(p!=NULL){
    cout<<p->id<<p->name<<p->score<<'\n';
    p=p->next;
    }
}
//插入链表节点函数,仔细理解。
void insert(student *head ,student *insert){
    student *temp = head->next;
    if(head==NULL){
        head->next=insert;
    }
    head->next= insert;
    insert->next= temp;
}
//节点的删除,首节点。对于中间节点则依据节点成员查询进行判断
student * delect(student *head ){
    student *temp1 = head->next;
    student *temp2 = temp1->next;
    head=temp1;
return head;
}
void main()
{
   student *p ;
   p =createList();
   //创建一个用于插入的节点
   student cha= {12,"insert",122,NULL};
   insert(p,&cha);
   p = delect(p);
   showList(p);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值