|  | 
 
5鱼币 
| 复制代码#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 释放。。难道不释放无所谓吗?
 
 | 
 |