1.定义结构体,作为结点使用
struct Grade_Info
{
int score;
struct Grade_Info *next;
};
typedef struct Grade_Info NODE;
2.创建链表
NODE *Greate_LinkList()
1.新建头结点,尾结点
head=(NODE *)malloc(sizeof(NODE));
if(head==NULL) //创建失败
{
printf("no enough memory!n");
return (NULL);
}
head->next=NULL; //头结点下一个结点为空
tail=head; //尾结点指向头结点
2.加入新结点
2.1创建新结点
2.2为新结点赋值
while (1)
{
scanf("%d",&score);
if(score<0)
break;
pnew=(NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return (NULL);
}
//对新结点赋值
pnew->score=score; //把输入值给新结点
pnew->next=NULL; //新结点的下一个指向空
//尾结点移向当前结点
tail->next=pnew; //尾结点的下一个,即对应的此刻的上一个的下一个,指向新结点
tail=pnew; //新结点变成尾结点
}
3.插入结点
void Insert_LinkList(NODE *head,NODE *pnew, int i) //已经定义好了新结点,和新结点的位置
3.1找到要插入的位置
3.2插入结点
NODE *p; //做索引用
int j;
p=head; //p指向头结点
//p向后移动i个位置,此刻的位置为i-1,即指向要插入的结点前面
for(j=0;jnext;
if(p==NULL)
{
printf("the %d node not found!n",i);
return;
}
//新结点的前一个指向新结点,新结点指向前一个结点的后一个结点
pnew->next=p->next;
p->next=pnew;
2.1创建新结点
2.2为新结点赋值
while (1)
{
scanf("%d",&score);
if(score<0)
break;
pnew=(NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return (NULL);
}
//对新结点赋值
pnew->score=score; //把输入值给新结点
pnew->next=NULL; //新结点的下一个指向空
//尾结点移向当前结点
tail->next=pnew; //尾结点的下一个,即对应的此刻的上一个的下一个,指向新结点
tail=pnew; //新结点变成尾结点
}
3.插入结点
void Insert_LinkList(NODE *head,NODE *pnew, int i) //已经定义好了新结点,和新结点的位置
3.1找到要插入的位置
3.2插入结点
NODE *p; //做索引用
int j;
p=head; //p指向头结点
//p向后移动i个位置,此刻的位置为i-1,即指向要插入的结点前面
for(j=0;jnext;
if(p==NULL)
{
printf("the %d node not found!n",i);
return;
}
//新结点的前一个指向新结点,新结点指向前一个结点的后一个结点
pnew->next=p->next;
p->next=pnew;
while (1)
{
scanf("%d",&score);
if(score<0)
break;
pnew=(NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return (NULL);
}
//对新结点赋值
pnew->score=score; //把输入值给新结点
pnew->next=NULL; //新结点的下一个指向空
//尾结点移向当前结点
tail->next=pnew; //尾结点的下一个,即对应的此刻的上一个的下一个,指向新结点
tail=pnew; //新结点变成尾结点
}
3.插入结点
void Insert_LinkList(NODE *head,NODE *pnew, int i) //已经定义好了新结点,和新结点的位置
3.1找到要插入的位置
3.2插入结点
NODE *p; //做索引用
int j;
p=head; //p指向头结点
//p向后移动i个位置,此刻的位置为i-1,即指向要插入的结点前面
for(j=0;jnext;
if(p==NULL)
{
printf("the %d node not found!n",i);
return;
}
//新结点的前一个指向新结点,新结点指向前一个结点的后一个结点
pnew->next=p->next;
p->next=pnew;
3.2插入结点
NODE *p; //做索引用
int j;
p=head; //p指向头结点
//p向后移动i个位置,此刻的位置为i-1,即指向要插入的结点前面
for(j=0;jnext;
if(p==NULL)
{
printf("the %d node not found!n",i);
return;
}
//新结点的前一个指向新结点,新结点指向前一个结点的后一个结点
pnew->next=p->next;
p->next=pnew;
4 删除指定结点
void Delete_LinkList(NODE *head, int i)
4.1 找到该结点
NODE *p,*q;
int j;
if(i==0)
return;
p=head;
for(j=0;jnext !=NULL;j++)
p=p->next; //p的指向要插入的结点的前驱结点
if(p->next==NULL)
{
printf("the %d node not found!n",i);
return;
}
4.2 删除该结点
q=p->next; //q指向要删除的结点
p->next=q->next; //前面结点的下一个指向当前结点的下一个
free(q); //删除当前结点
5 销毁链表
void Free_LinkList(NODE *head)
5.1 销毁所有结点
NODE *p,*q;
p=head;
while (p->next!=NULL)
{
q=p->next; //q为p的下一个
p->next=q->next; //p向后移动
free(q); //销毁q
}
5.2 销毁头结点
free(head);
5 显示所有结点
void Display_LinkList(NODE *head)
{
NODE *p;
for(p=head->next;p!=NULL;p=p->next) //从头结点的下一个开始,到最后一个结点
printf("%d ",p->score);
printf("n");
}
6 主函数
6.1 创建链表
6.1.1 创建头结点
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
NODE *p,*q;
int j;
if(i==0)
return;
p=head;
for(j=0;jnext !=NULL;j++)
p=p->next; //p的指向要插入的结点的前驱结点
if(p->next==NULL)
{
printf("the %d node not found!n",i);
return;
}
4.2 删除该结点
q=p->next; //q指向要删除的结点
p->next=q->next; //前面结点的下一个指向当前结点的下一个
free(q); //删除当前结点
5 销毁链表
void Free_LinkList(NODE *head)
5.1 销毁所有结点
NODE *p,*q;
p=head;
while (p->next!=NULL)
{
q=p->next; //q为p的下一个
p->next=q->next; //p向后移动
free(q); //销毁q
}
5.2 销毁头结点
free(head);
5 显示所有结点
void Display_LinkList(NODE *head)
{
NODE *p;
for(p=head->next;p!=NULL;p=p->next) //从头结点的下一个开始,到最后一个结点
printf("%d ",p->score);
printf("n");
}
6 主函数
6.1 创建链表
6.1.1 创建头结点
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
void Free_LinkList(NODE *head)
5.1 销毁所有结点
NODE *p,*q;
p=head;
while (p->next!=NULL)
{
q=p->next; //q为p的下一个
p->next=q->next; //p向后移动
free(q); //销毁q
}
5.2 销毁头结点
free(head);
5 显示所有结点
void Display_LinkList(NODE *head)
{
NODE *p;
for(p=head->next;p!=NULL;p=p->next) //从头结点的下一个开始,到最后一个结点
printf("%d ",p->score);
printf("n");
}
6 主函数
6.1 创建链表
6.1.1 创建头结点
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
free(head);
5 显示所有结点
void Display_LinkList(NODE *head)
{
NODE *p;
for(p=head->next;p!=NULL;p=p->next) //从头结点的下一个开始,到最后一个结点
printf("%d ",p->score);
printf("n");
}
6 主函数
6.1 创建链表
6.1.1 创建头结点
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
6.1 创建链表
6.1.1 创建头结点
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
6.1.2 添加数据
NODE *head, *pnew;
head=Greate_LinkList();
if(head==NULL)
return;
printf("after create:");
Display_LinkList(head);
6.2 插入数据
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
6.2.1 创建新结点
6.2.2 添加新结点
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);
6.3 删除数据
6.3.1 删除结点
6.3.2 销毁链表
Delete_LinkList(head,3);
printf("after delete:");
Display_LinkList(head);
Free_LinkList(head);
pnew = (NODE *) malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("no enough memory!n");
return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);
printf("after insert:");
Display_LinkList(head);



