⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lind_t3.c

📁 谭浩强第二版的课后习题的答案的源程序
💻 C
字号:
# include <stdio.h>
# include <stdlib.h>
# define null 0
# define LEN sizeof(struct student)
# define FORMAT "%ld,%s,%c,%d,%.2f,%.2f,%.2f"
# define FORMATP "\n%ld   %s   %c   %d   %.2f   %.2f   %.2f\n"

struct student
{
	long num;
	char name[20];
	char sex;
	int age;
	float score[3];
	struct student * next;
};

int n;


struct student * creat(void)
{
	struct student * head;
	struct student * p1,* p2;

	n=0;
	p1=p2=(struct student *)malloc(LEN);
	scanf(FORMAT,&p1->num,&p1->name,&p1->sex,&p1->age,
		&p1->score[0],&p1->score[1],&p1->score[2]);
	head=NULL;

	while (p1->num!=0)
	{
		n=n+1;
		if(n==1) head=p1;
		else p2->next=p1;
		p2=p1;
		p1=(struct student *) malloc(LEN);
		scanf(FORMAT,&p1->num,&p1->name,&p1->sex,&p1->age,
			&p1->score[0],&p1->score[1],&p1->score[2]);
	}

	p2->next=NULL;
	return(head);
}


void print(struct student * head)
{
	struct student * p,*q;
	printf("\nNow,these %d records are:\n",n);
	p=head;
	q=&p->num;
	if(head!=NULL)

	do
	{
		printf (FORMATP,q->num,q->name,q->sex,q->age,
			q->score[0],q->score[1],q->score[2]);
		p=p->next;
	}
	while(p!=NULL);
}


struct student * del(struct student * head,long num)
{
	struct student * p1,* p2;
	if(head==NULL)
	{
		printf("\nlist null!\n");
		goto end;
	}
	p1=head;

	while(num!=p1->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("delete:%ld\n",num);
		n=n-1;
	}
	else printf("%ld not been found!\n",num);
	end:
	return(head);
}


struct student * insert(struct student * head,struct student * stud)
{
	struct student * p0, * p1, * p2;
	p1=head;
	p0=stud;
	if(head==NULL)
	{
		head=p0;
		p0->next=NULL;
	}
	else
	{
		while((p0->num > p1->num) && (p1->next != NULL))
		 {
			p2=p1;
			p1=p1->next;
		 }
	if(p0->num <= p1->num)
		{
			if(head==p1)
				head=p0;
			else 	p2->next=p0;
			p0->next=p1;
		}
	else
		{
			p1->next=p0;
			p0->next=NULL;
		}
	}
	n=n+1;
	return(head);
}


void main()
{
	struct student * head, * stu;
	long del_num;

	printf("input records:\n");
	head=creat();
	print(head);
	printf("\ninput the deleted number:");
	scanf("%ld",&del_num);

	while (del_num!=0)
	{
		head=del(head,del_num);
		print(head);
		printf("\ninput the deleted number:");
		scanf("%ld",&del_num);
	}

	printf("\ninput the inserted record:");
	stu=(struct student *) malloc(LEN);
	scanf(FORMAT,&stu->num,&stu->name,&stu->sex,&stu->age,
		&stu->score[0],&stu->score[1],&stu->score[2]);

	while (stu->num!=0)
		{
			head=insert(head,stu);
			print(head);
			printf("\ninput the inserted record:");
			stu=(struct student *) malloc(LEN);
			scanf(FORMAT,&stu->num,&stu->name,&stu->sex,&stu->age,
				&stu->score[0],&stu->score[1],&stu->score[2]);
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -