单链表的基本操作——c++(有详细注解)

呕心沥血
千辛万苦
凌晨一点仍在调试
上辈子连环杀人,这辈子软件工程
无语住了

 #include<iostream>

typedef struct LNode{
    int date;
    struct LNode *next;
}LNode,*LinkList;//创造一个链表

bool InitList(LinkList &L);
void CreateList(LinkList &L,int n);
void PrintList(LinkList L);
void FoundList(LinkList L,int e);
void InsertList(LinkList &L,int i,int e);
void DeleteList(LinkList &L,int i);

using namespace std;

int main()
{
    int n,e,insertn,inserte,deleten;
    LinkList L;
    InitList(L);
    cout<<"请输入单链表长度:";
    cin>>n;
    CreateList(L,n);
    PrintList(L);
    cout<<"请输入要查找的值:";
    cin>>e;
    FoundList(L,e);
    cout<<"请输入要插入的位置:";
    cin>>insertn;
    cout<<"请输入要插入的值:";
    cin>>inserte;
    InsertList(L,insertn,inserte);
    cout<<"请输入要删除的位置:";
    cin>>deleten;
    DeleteList(L,deleten);

    return 0;
}
bool InitList(LinkList &L)
{
    L=new LNode;
    L->next=NULL;
    return true;//bool型对单链表进行初始化
}
void CreateList(LinkList &L,int n)
{
    LinkList r,p;//定义链表
    L=new LNode;
    L->next=NULL;
    r=L;//对r链表进行初始化
    cout<<"请输入单链表:";
    for(int i=0;i<n;i++)
    {
        p=new LNode;
        cin>>p->date;
        p->next=NULL;//对怕p结点初始化
        r->next=p;//使r的指针域指向p
        r=p;//使r=p,然后接受下一个p的结点
    }//建立单链表,后插法

}
void PrintList(LinkList L)
{
    LinkList p;
    p=L->next;
    cout<<"单链表为:";
    while(p)
    {
        cout<<p->date<<" ";//打印链表p的值
        p=p->next;//使p指向链表的下一个位置,直到NULL
    }
    cout<<endl;//打印单链表
}
void FoundList(LinkList L,int e)
{
    LinkList p;
    p=L->next;
    int count=0;
    while(p)
    {
        count++;//查找一次count+1
        if(p->date==e)
        {
           
            cout<<"第"<<count<<"次找到了与"<<e<<"相等的值";
        }
        p=p->next;//使p指向下一个位置,,直到NULL
    }
        if(count==0)
        {
            cout<<"没有找到与"<<e<<"相等的值";
        }
}//查找e的值,并输出第几次查找到
void InsertList(LinkList &L,int i,int e)
{
    LinkList p,s;
    p=L;
    int count=0;
    while(p&&(count<i-1))
    {
        p=p->next;//p指向的使i-1的位置
        count++;
    }
    s=new LNode;//创建一个新结点
    s->date=e;//给s结点的数据域赋值
    s->next=p->next;//将p指向原i位置的指针域赋给s结点,使s结点的指针域指向的是原i位置的结点
    p->next=s;//使p的下一个位置(也就是i位置)为s
    PrintList(L);
}//在i的位置插入一个e值
void DeleteList(LinkList &L,int i)
{
    LinkList s;
    LinkList p=L;
    int count=0;
    while(p&&(count<i-1))
    {
        p=p->next;
        count++;
    }
    s=p->next;//s指向i位置结点
    p->next=s->next;//s的下一个就是i+1个结点//s->next->next
    delete s;
    PrintList(L);
}//删除i位置的结点
  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值