|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// 写一个函数删除动态链表中的节点(加入一个链表)
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct student) //student结构的大小
struct student *crcat(); //创建链表
void print(struct student *heads);//打印链表函数
struct student *jianli(struct student *herd); //在链表中插入节点;
void deletes(struct student *head);// 删除链表的函数。
struct student
{
int num;
float score;
struct student *next;
};
int n; //全局变量;用来记录存放了多少个数据
void main()
{
struct student *stu,*std;//指向链表的指针。
stu = crcat();
print(stu); //打印链表
std=jianli(stu);//插入节点。
print(std);
printf("\n\n");
deletes(std); //删除链表。
system("pause");//按任意键继续。
}
struct student *crcat()//
{
struct student *head; //指向链表的指针
struct student *p1,*p2;//指向链表的指针
p1=p2=(struct student *)malloc(LEN);//p1 p2 指向新开辟的空间
printf("please enter the num:");
scanf("%d",&p1->num); //输入学生号。
printf("please enter the score:");
scanf("%f",&p1->score); //输入姓名。
head = NULL; //head= 0.
n = 0;
while(p1->num != 0) // p1 指向的num不等于0的话执行下列语句。
{
n++; //n递增1
if(1 == n) //n=1的话head指向头结点。
{
head = p1;
}
else //如果n不为1的话 p2链表的指针指向下一个链表。
{
p2->next = p1;
}
p2 = p1; // p2指向p1.
p1 = (struct student *)malloc(LEN); //新开辟的空间地址给p1
printf("\nplease enter the num:");
scanf("%d",&p1->num);
printf("please enter the score:");
scanf("%f",&p1->score);
}
p2->next = NULL; //如果p1->num = 0的话p2->next = 0;
return head; //返回该链表的头结点。
}
void print(struct student *heads) //打印链表。
{
struct student *p;
printf("\nTher aer %d recor!\n\n",n);
p=heads;
if(heads)
{
do
{
printf("学号为 %d 成绩是:%f\n",p->num,(*p).score);
p = p->next;
}while(p); //判断p->next 为 NULL就结束循环。
}
}
struct student *jianli(struct student *herd)
{
struct student *p0,*p1,*p2;
p1=p2=herd;
p0 = (struct student *)malloc(LEN);
printf("输入要插入的节点");
scanf("%d",&p0->num);
printf("输入节点数据");
scanf("%d",&p0->score);
while(p0->num>p1->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num)
{
if(herd==p1)
{
herd=p0;
p0->next=p1;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
n=n=1;
return herd;
}
void deletes(struct student *head)
{
struct student *p1,*p2;
int w;
p1 = p2 = head;
printf("输入要删除的节点");
scanf("%d",&w);
if(NULL == head)
{
goto END;
}
while(w != p1->num&&p1->next)
{
p2=p1;
p1=p1->next;
}
if(p1->next)
{
printf("\t\n\n找不到\n");
}
if(w == (*head).num )
{
p1=(*p1).next ;
head = p1;
}
else if(w == p1->num)
{
p2->next = p1->next;
}
END: printf("空链表");
print(head);
}
|
|