一、单链表的顺序存储结构:
代码如下:
#include <stdio.h>
#include <stdlib.h>
void menu();
void Init();
int CreatList(unsigned int m);
int PrintList();
int Find_LinkList(long long int ISBN);
int Delete_LinkList(long long int IS);
int Insert_LinkList();
typedef struct //数据域的数据
{
long long int ISBN; //书编号
char Bookname[20]; //书名
int Fix; //定价
}DataType;
typedef struct node //节点
{
DataType data; //数据域
struct node *next; //指针域
}LNode;
LNode *head;
int cnt=0;
int main()
{
unsigned int select;
unsigned int value;
long long int IS;
Init();
while(1)
{
menu();
printf("请输入要操作的选项!\n");
scanf("%d",&select);
switch(select)
{
case 1:printf("请输入要创建的节点数:");
scanf("%d",&value);
if(!CreatList(value))
{
printf("创建成功!\n");
}break;
case 2:if(!PrintList())
{
printf("数据输出成功!\n\n\n");
}break;
case 3:if(!Insert_LinkList())
{
printf("插入成功!\n");
}break;
case 4:printf("请输入要删除的编号:");
scanf("%lld",&IS);
if(!Delete_LinkList(IS))
{
printf("删除成功!\n\n");
}break;
case 5:printf("请输入要查找的编号:");
scanf("%lld",&IS);
if(!Find_LinkList(IS))
{
printf("查找成功!\n\n");
}break;
case 0:exit(0);break;
default:break;
}
system("pause");
system("cls");
}
return 0;
}
void menu()
{
printf("(1)--单链表的创建!\n");
printf("(2)--单链表的输出!\n");
printf("(3)--单链表的插入!\n");
printf("(4)--单链表的删除!\n");
printf("(5)--单链表的查找!\n");
printf("(0)--退出\n");
}
void Init()
{
head=(LNode *)malloc(sizeof(LNode));
head->next=NULL;
}
int CreatList(unsigned int m)
{
unsigned int i;
LNode *s,*p=head;
for(i=1;i<=m;i++)
{
s=(LNode *)malloc(sizeof(LNode));
printf("请输入节点数据:ISBN 书名 定价\n");
scanf("%lld %s %d",&s->data.ISBN,s->data.Bookname,&s->data.Fix);
s->next=NULL;
p->next=s;
p=s;
cnt++;
}
return 0;
}
int PrintList()
{
LNode *p=head;
if(p->next==NULL) //判断链表是否为空
{
printf("单链表为空!\n");
return 1;
}
printf("输出的数据为:\n");
p=head->next;
while(p!=NULL) //循环输出数据
{
printf("ISBN:%lld 书名:%s 定价:%d\n",p->data.ISBN,p->data.Bookname,p->data.Fix);
p=p->next;
}
return 0;
}
int Find_LinkList(long long int IS) //按ISBN查找
{
LNode *p=head;
if(p->next==NULL) //判断链表是否为空
{
printf("单链表为空!\n");
return 1;
}
p=head->next;
while(IS!=p->data.ISBN) //判断输入的ISBN是否与数据库中的相等
{
if(p->next==NULL)
{
printf("没有此数据!\n\n");
return 2;
}
p=p->next;
}
printf("ISBN:%lld 书名:%s 定价:%d\n\n",p->data.ISBN,p->data.Bookname,p->data.Fix);
return 0;
}
int Delete_LinkList(long long int IS) //按ISBN查找,IS为要查找的ISBN
{
LNode *q,*p=head;
if(p->next==NULL)
{
printf("单链表为空,无法删除!\n");
return 1;
}
while(IS!=p->data.ISBN)
{
if(p!=NULL)
{
q=p;
p=p->next;
}
}
q->next=p->next;
free(p); //释放存储单元
return 0;
}
int Insert_LinkList() //按编号插入,插入到p节点的尾部
{
LNode *s,*p=head;
long long int m;
s=(LNode *)malloc(sizeof(LNode));
if(p->next==NULL) //考虑空表的插入
{
printf("请输入节点数据:ISBN 书名 定价\n");
scanf("%lld %s %d",&s->data.ISBN,s->data.Bookname,&s->data.Fix);
}
else //非空表插入
{
printf("请输入要插入位置的ISBN!\n");
scanf("%d",&m);
printf("请输入节点数据:ISBN 书名 定价\n");
scanf("%lld %s %d",&s->data.ISBN,s->data.Bookname,&s->data.Fix);
}
if(p->next==NULL) //非空表插入
{
p->next=s; //插入
s->next=NULL;
printf("插入成功!\n");
return 1;
}
while((p->next!=NULL)&&(m!=p->data.ISBN)) //查找要插入的位置
{
p=p->next;
}
s->next=p->next;
p->next=s;
return 0;
}在这里插入代码片