算法作业-学生表;多项式加法

实现学生类 插入删除 统计均分

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student;
typedef struct Student *PStudent;
struct Student {
	char name[20];
	int score;
	PStudent link;
};

typedef struct Student *StudentList;

StudentList createNullList_link(void){
	StudentList llist = (StudentList)malloc(sizeof(struct Student));
	if(llist!=NULL) llist->link = NULL;
	else printf("Out of space!\n");
	return llist;
}

void insertPost_link(StudentList llist, char n[20], int s){
	PStudent p,q;
	p = llist;
	while(p->link!=NULL)
		p=p->link;
	q = (PStudent)malloc(sizeof(struct Student));
	if(q == NULL) {
		printf("Out of space!\n");
		return ;
	}
	else {
		strcpy(q->name, n);
		q->score = s;
		q->link = p->link;
		p->link = q;
		return ;
	}
}

int isNullList_link(StudentList llist)
{
	return(llist->link == NULL);
}

void deleteV_link(StudentList llist, char n[20])
{
	PStudent p,q;
	p = llist;
	if(p==NULL) return ;
	while(p->link!=NULL && strcmp(p->link->name, n) != 0)
		p = p->link;
	if(p->link == NULL) {
		printf("Not exist!\n");
		return ;
	}
	else {
		q = p->link;
		p->link = q->link;
		free(q);
		return ;
	}
}
//计算所有学生平均成绩
float Average_score(StudentList llist)
{
  int num=0,score=0;
  PStudent p;
  p = llist;
  if(p->link == NULL)
  {
    printf("Empty list!\n");
    return 0;
  }
  else{
    while(p->link != NULL)
      {
        p = p->link;
        score+=p->score;
        num+=1;
      }
    return score/num;
  }
}
int main()
{
  char name[20];
  int s;
  StudentList llist = createNullList_link();
  int i=-1;
  if(llist != NULL){
  while(1)
  {
    printf("请输入您想做的操作,0为插入,1为删除,2为统计均分:\n");
    scanf("%d",&i);
    if(i == 0){
    printf("请输入一个学生的名字和他的分数:\n");
    scanf("%s",name);
    scanf("%d",&s);
    insertPost_link(llist, name, s);}
    if(i == 1){
      printf("请输入您想删除的学生名字:\n");
      scanf("%s",name);
      deleteV_link(llist,name);}
    if(i == 2){
      printf("均分为:%.3f\n",Average_score(llist));}
    if(i == 3){
       printf("%d",isNullList_link(llist));}
    }
  }
}

实现多项式加法

#include<stdio.h>
#include<malloc.h>
typedef struct Node {
	float c;
	int e;
	struct Node *Link;
}Node, *Plink;

Plink creat_Node();
void traverse(Plink pHead);
Plink add(Plink Da, Plink Db);
int main(void)
{
	Plink Da,Db,Dj;
	Da = creat_Node();
    traverse(Da);
	Db = creat_Node();
    traverse(Db);
	Dj = add(Da, Db);
	traverse(Dj);
	return 0;
}

Plink creat_Node()
{
	Plink pHead,pTail,pNew;
	int len;
	float c;
	int e;
	int i;
	pHead = (Plink)malloc(sizeof(Node));
	pHead->Link = NULL;
	pTail = pHead;
	pNew = NULL;
	printf("多项式项数len = ");
	scanf("%d", &len);
	for(i = 0; i < len; i++)
	{
		printf("输入他的系数和指数", i+1);
		scanf("%f%d", &c,&e);
		pNew = (Plink)malloc(sizeof(Node));
		pNew->c = c;
		pNew->e = e;
		pNew->Link = NULL;
		pTail->Link = pNew;
		pTail = pNew;
	}
	return pHead;
}

void traverse(Plink pHead)
{
	Plink p;
	p = pHead->Link;
	while(p != NULL)
	{
		printf("%.2fx^%d",p->c,p->e);
		p = p->Link;
		if(p!=NULL)
			printf(" + ");
	}
	printf("\n");
}
Plink add(Plink Da, Plink Db)
{
	Plink Dj,Dah,Dbh,pTail;
	Dj = (Plink)malloc(sizeof(Node));
	Dj->Link = NULL;
	pTail = Dj;
	Dah = Da->Link;
	Dbh = Db->Link;
	while(Dah && Dbh)
	{
		if(Dah->e < Dbh->e)
		{
			pTail->Link = Dah;
			pTail = Dah;
			Dah = Dah->Link;
		}
		else if(Dah->e > Dbh->e)
		{
			pTail->Link = Dbh;
			pTail = Dbh;
			Dbh = Dbh->Link;
		}
		else
		{
			if(0 != (Dah->c + Dbh->c))
			{
				Dah->c = Dah->c + Dbh->c;
				pTail->Link = Dah;
				pTail = Dah;
			}
			Dah = Dah->Link;
			Dbh = Dbh->Link;
		}
	}
	if(Dah != NULL)
		{
			pTail->Link = Dah;
		}
		if(Dbh != NULL)
		{
			pTail->Link = Dbh;
		}
		return Dj;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值