。。

作者在 2013-01-06 17:21:26 发布以下内容
/*
学生信息删除函数,删除指定学号的学生信息,
传递给该函数的实参是所建立的单链表的头指针L、要删除的学生学号。
若删除成功,返回值为1,否则,返回值为0。
*/
#include<stdio.h>
#include<stdlib.h>
#define N 2

typedef struct stud
{
    int num;
    char name[10];
    float score[N+1];
    struct stud *next;
}NODE;

NODE *create();
int Delete(NODE **p_head, int *per);
void print(NODE *head);

//主函数
int main()
{
    NODE *L;
    int n=1, i;
    L=create();
    print(L);
    //printf("请输入要删除学生的学号:\n");
    //scanf("%d\n", &n);
    i=Delete(&L, &n);
    print(L);
    printf("i=%d\n", i);
    return 0;
}

NODE *create()               //创建链表,返回表头指针
{
	NODE *head,*p,*q;
	int i;
	head=(NODE *)malloc(sizeof(NODE));
	p=head;
	for(i=1;i<N;i++)
	{
		printf("请依次输入第%d个学生的学号、姓名、分数(以空格键隔开):\n",i);
		scanf("%d %s",&p->num,p->name);
		for(int k=0;k<N+1;k++)
		scanf("%f",&p->score[k]);
		q=(NODE *)malloc(sizeof(NODE));
		p->next=q;
		p=p->next;
	}
	printf("请依次输入第%d个学生的学号、姓名、分数(以空格键隔开):\n",i);
	scanf("%d %s",&p->num,p->name);
	for(int r=0;r<N+1;r++)
	scanf("%f",&p->score[r]);
	p->next=NULL;
	return head;
}

//学生信息删除函数,删除指定学号的学生信息
int Delete(NODE **p_head, int *per)
{
	NODE *p,*q;
	p=*p_head;
	if(p==NULL)         //空指针,删除失败,返回0
	return 0;
    if(p->num==*per)    //删除节点在头指针处
    {
    	*p_head=p->next;
    	free(p);
    	return 1;
    }
    else
	{
	    while(p->num!=*per&&p->next!=NULL)
	    {
	    	q=p;
	    	p=p->next;
	    }
	    if(p->num==*per)      //已找到,删除该节点
	    {
	    	q->next=p->next;
	    	free(p);
	    	return 1;
	    }
	    else              //链表中不存在指定学号的学生
           return 0;
	}
}

void print(NODE *head)    //输出链表中信息
{
	NODE *p;
	p=head;
	if(p==NULL)
	   printf("该链表为空!");
	else
	{
	    while(p->next!=NULL)
       {
		  printf("姓名:%s\n 学号:%d\n",p->name,p->num);
	      for(int j=0;j<N+1;j++)
		  printf("分数:%4f",p->score[j]);
		  printf("\n");
		  p=p->next;
	    }
		printf("姓名:%s\n 学号:%d\n",p->name,p->num);
		for(int j=0;j<N+1;j++)
		printf("分数:%4f",p->score[j]);
		printf("\n");
	}
}
C | 阅读 954 次
文章评论,共0条
游客请输入验证码
浏览14353次
文章分类