实现学生类 插入删除 统计均分
#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;
}