妈妈我的单链表终于可以运行啦!!!
之前一直报错,应该是看多了伪码导致的(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);
}