#include<stdio.h>
#include<stdlib.h>
//链表元素的数据类型
typedef struct
{
char name[20];
float score;
}ElemType;
//线性链表的单链表存储结构
typedef struct
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void main()
{
LinkList L,p,q; //链表指针 ,p只是一个游走的指针,可以指向任意一个结点
ElemType e1,e2;
L=(LinkList)malloc(sizeof(LNode));
strcpy(e1.name,"巫妖王");
e1.score=88.88;
strcpy(e2.name,"亚瑟");
e2.score=99.22;
L->next=NULL; //头结点不放数据,没有指向
p=(LinkList)malloc(sizeof(LNode)); //随机的给你分配一个存储空间,这样才能p->data,不然运行会出错
//头插法,始终插在链表头部右边
p->data=e1; //这里可以先放好数据再连接,也可以先连接好在放数据,p的位置没动
p->next=L->next;
L->next=p;
p=(LinkList)malloc(sizeof(LNode)); //随机的给p一个地址空间
p->data=e2;
p->next=L->next;
L->next=p;
p=L->next; //先指向表头右边的第一个结点
while(p)
{
printf("%s %7.2f\n",p->data.name,p->data.score);
p=p->next;
}
p=L; //p指向要删除的节点的前驱
q=p->next; //q指向要删除的节点
p->next=q->next; //就把第一个节点删除了
free(q);
p=L->next; //先指向表头右边的第一个结点
while(p)
{
printf("%s %7.2f\n",p->data.name,p->data.score);
p=p->next;
}
}
运行结果: