单链表的增删改查、头插法

妈妈我的单链表终于可以运行啦!!!

之前一直报错,应该是看多了伪码导致的(doge)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
typedef struct {
    char no;   //图书编号
    char name; //书名
    float price;     //价格
}Book;
typedef struct LNode{
    Book data;
    struct LNode *next;
}LNode,*LinkList;//定义一个链表的数据域和指针域
LinkList lintList (LinkList &L)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    return L;
    
}//创立头节点
void CreateList_H(LinkList &L,int n)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    for (int i=0; i<n; ++i)
    {       
        LNode *p;
        p=(LNode*)malloc(sizeof(LNode));
        cin >> p->data.no >> p->data.name >> p->data.price ;
        p->next=L->next;
        L->next=p;
    }
}//头插法建立一个链表;
LinkList bianli(LinkList &L)
{
    LNode *p;
    p=L->next;
    while(p)
    {
        cout << p->data.no  << ' '<< p->data.name  << ' ' << p->data.price << '\n';
        p=p->next;
    }
    return p;
}//遍历一整个链表。
void chazhao(LinkList &L,char nam)
{
    LNode *p;
    p=L->next;
    while(p && p->data.name!=nam)
    {
        p=p->next;
    }
    cout  << "编号:" <<  p->data.no << ' '  << "价格" <<  p->data.price << '\n';
}
void anweichazhao(LinkList &L,int i)
{
    LNode *p;
    p=(LNode*)malloc(sizeof(LNode));
    p=L->next;
    int j=1;
    while(p &&j<i)
    {
        p=p->next;
        ++j;
    }
    if (!p || j>i)
    {
        return ;
    }
    cout << "图书编号"  << p->data.no  << ' '  << "图书名称"<< p->data.name  << "图书价格" << p->data.price << '\n';

}
void listdelete(LinkList &L,int i)//删除第i个元素
{
    LNode *p;
    p=(LNode*)malloc(sizeof(LNode));
    p=L;
    int j=0;
    while(p->next && j<i-1)
    {
        p=p->next;
        j++;
    }
    if (!(p->next) || (j>i-1))
    {
        return ;
    }
    LNode *q;
    q=p->next;
    p->next=q->next;
    free(q);

}
int main()
{
    cout << "请输入图书的个数\n";
    cin >> n;//图书个数为n;
    LNode *head;
    head=lintList(head);
    cout << "请输入图书信息\n";
    CreateList_H(head,n);//输入n个图书的信息。
    cout << "遍历一遍\n";
    bianli(head);
    cout << "请输入要查找的名字\n";
    char nam;
    cin >> nam;
    chazhao(head,nam);
    cout << "请输入要查找的位数\n";
    int e;
    cin >> e;
    anweichazhao(head,e);
    cout << "请输入要删除的序号\n";
    int shan;
    cin >> shan;
    listdelete(head,shan);
    cout << "遍历一遍删除后的\n";
    bianli(head);



}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值