#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof (struct student )//student结构的大小
struct student *creat();//自定义函数--创建链表
struct student *del(struct student *head,int num);//自函数--del函数用于删除结点,*head即链表
//的头指针,num是要删除的结点num
void print(struct student *head);//自定义函数--打印链表
struct student
{
int num;
float score;
struct student *next;
};
int n; //全局变量,用来记录存放了多少数据
int main()
{
struct student *stu,*p;
int n;
stu=creat(); //得到创建后的链表的头指针
p=stu;
print(p);
printf("Please enter the num to delete\n");
scanf("%d",&n);
print(del(p,n)); //调用函数del 进行删除
printf("\n\n");
system("pause");
}
// 创造链表
struct student *creat()
{
struct student *head; //头指针
struct student *p1,*p2;
p1=p2=(struct student *)malloc(LEN);
printf("Please enter the num\n");
scanf("%d",&p1->num);
printf("Please enter the score\n");
scanf("%f",&p1->score);
head=NULL;
n=0;
while(p1->num)
{
n++;
if(1==n)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
p1=(struct student *)malloc(LEN);
printf("Please enter the num:\n");
scanf("%d",&p1->num);
printf("Please enter the score:\n");
scanf("%f",&p1->score);
}
p2->next = NULL;
return head;
}
void print(struct student *head)
{
struct student *p;
printf("\nThere are %d records!\n",n);
p=head;
if(head)
{
do
{
printf("学号是为%d的成绩是 %f \n",p->num,p->score);
p=p->next;
}while(p);
}
}
struct student *del(struct student *head,int num)
{
struct student *p1,*p2;
if(NULL==head) // 如果头结点指向NULL,这是一个空指针,直接结束
{
printf("\nThis list is null!\n");
goto end;
}
p1=head;
while(p1->num!=num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num) //将要删除的结点位于头结点的时候(特殊情况)
{
if(p1==head)
{
head=p1->next;
}
else //一般情况
{
p2->next=p1->next;
}
printf("\nDelete No:%d succeed!\n",num);
n=n-1; //全局变量,记录链表的数据个数
}
else
{
printf("%d not been found!\n",num);
}
end:
return head;
}
其中用到了malloc分配内存
可是并没有用 free 释放。。难道不释放无所谓吗?
|