链表的创建插入以及删除

  链表是一种很常见的数据结构,相对使用数组存放数据,使用链表更加节省空间,并且在任意位置删除,添加元素都是很快的

#include<cstdio>
#include<cstdlib>
#include<iostream> 
using  namespace std;
//创建一个结构体,表示链表的节点类型 
struct Student{
    char Name[20];
    int Number;
    struct Student* Next;//指向下一个结构体的指针 
}; 
int count;//使用全局变量表示链表的长度
//创建链表 
struct Student *Create(){
    struct Student* Head=NULL;
    struct Student* End,*New;
    count=0;
    End=New=(struct Student*)malloc(sizeof(struct Student));
    cout<<"请输入姓名和学号"<<endl; 
    cin>>New->Name>>New->Number;
    while(New->Number!=0){
        count++;
        if(count==1){//对链表进行判断,是否为第一个创建的节点 
            New->Next=Head;//将此节点设置为Head 
            End=New;
            Head=New;
        }else{
            New->Next=NULL;//此节点的指向下一节点的指针为空,将上一个节点的指针指向这个节点 
            End->Next=New;
            End=New;
        }
        New=(struct Student*)malloc(sizeof(struct Student));
        cin>>New->Name>>New->Number;
    }
    free(New);
    return Head; 
}
//进行插入操作,在表头进行插入 
struct Student* Insert(struct Student*Head){
    struct Student* New;//创建临时节点,创建新的分配空间 
    New=(struct Student*)malloc(sizeof(struct Student));
    cout<<"请输入姓名和学号"<<endl;
    cin>>New->Name>>New->Number;
    New->Next=Head;
    Head=New;
    count++;//节点数加1 
    return Head;
}
//进行删除操作 
strucu Student* Delete(struct Student* Head,int index){
    int i;
    struct Student* Temp;//创建临时节点,
    struct Student* Pre;//创建临时节点,
    Temp=Head;
    Pre=Temp;
    cout<<"开始删除"<<endl;
    for(i=1;i<index;i++){
        Pre=Temp;
        Temp=Temp->Next;
    }
    Pre->Next=Temp->Next;//Temp为需要删除的节点,将此节点的上一节点的指向下一节点的指针指向此节点的下一节点 
    free(Temp);
    count--;
}
//打印操作 
void Print(struct Student* Head){
    struct Student* Temp;
    Temp=Head;
    cout<<"姓名 学号"<<endl;
    while(Temp!=NULL){
        cout<<Temp->Name<<"    "<<Temp->Number<<endl;
        Temp=Temp->Next;
    }
}
int main(){
    struct Student* Head;
    Head=Create();
    Head=Insert(Head);
    Delete(Head,2);
    Print(Head);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值