在第二题的基础上,输入一个年龄,如果链表中的结点包含的年龄等于此年龄,
第一题:建立一个线性链表,其元素值为依次从键盘输入的正整数,以输入一个非正整数为结束,然后依次输出线性链表中的各元素值。(课本P23)。
#include "stdlib.h"
#include "stdio.h"
#define null 0
#define size 6
struct node
{
int data;
struct node * next;
};
void main ()
{
struct node * head;
struct node * p,* q;
head=(struct node *)malloc(size);
p=head;
q=(struct node *)malloc(size); scanf("%d",&q->data); while (q->data!=0)
{
p->next=q;
p=q;
q=(struct node *)malloc(size); scanf("%d",&q->data);
}
p->next=null;
p=head;
while (p!=null)
{
printf("%d\n",p->data);
p=p->next;
}
}
第二题:建立一个线性链表,其元素值为:包括学号、姓名、性别、年龄等信息。并依次从键盘输入(输入时要有相应的提示)以输入0结束,然后依次输出线性链表中的各元素值。
#include"stdlib.h"
#include"stdio.h"
#define null 0
#define size 40
struct node
{
char num[6];
char name[8];
char sex[2];
int age;
struct node * next;
};
void main ()
{
int x;
struct node * head;
struct node * p,* q;
head=(struct node *)malloc(size); p=head;
printf("if exit:pleas into '0' "); scanf("%d",&x);
while (x!=0)
{
q=(struct node *)malloc(size);
printf("num\n");
scanf("%s",q->num);
printf("name\n");
scanf("%s",q->name);
printf("sex\n");
scanf("%s",q->sex);
printf("age\n");
scanf("%d",&q->age);
p->next=q;
p=q;
printf("if exit:pleas into '0' ");
scanf("%d",&x);
}
p->next=null;
p=head;
printf("\n num name sex age \n"); while (p!=null)
{
printf("%8s%8s%6s%6d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}
}
第三题:在第二题的基础上,输入一个年龄,如果链表中的结点包含的年龄等于此年龄,将此结点删除,然后依次输出线性链表中的各元素值。
#include"stdlib.h"
#include"stdio.h"
#define null 0
#define size 40
struct node
{
char num[6];
char name[8];
char sex[2];
int age;
struct node * next;
};
void main ()
{
int x,iage,find=0;
struct node * head;
struct node * p,* q,*pt;
head=(struct node *)malloc(size); p=head;
printf("if exit:pleas into '0' "); scanf("%d",&x);
while (x!=0)
{
q=(struct node *)malloc(size);
printf("num\n");
scanf("%s",q->num);
printf("name\n");
scanf("%s",q->name);
printf("sex\n");
scanf("%s",q->sex);
printf("age\n");
scanf("%d",&q->age);
p->next=q;
p=q;
printf("if exit:pleas into '0' ");
scanf("%d",&x);
}
p->next=null;
p=head;
printf("\n num name sex age \n"); while (p!=null)
{
printf("%8s%8s%6s%6d\n",p->num,p->name,p->sex,p->age); p=p->next;
}
printf("pleas into age :\n");
scanf("%d",&iage);
pt=head;
p=pt;
pt=pt->next;
while (pt!=null)
{
if(pt->age==iage)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(find==0)
printf("no find %d ",iage);
else
p=head;
printf("\n num name sex age \n"); while (p!=null)
{
printf("%8s%8s",p->num,p->name);
printf("%8s%5d\n",p->sex,p->age);
p=p->next;
}
}
第四题:现在假设有两个多项式a(x)=7x^8+6x^5+12x^2-9;b(x)=3x^11+10x^8+8x^2编写一个程序将这两个多项式相加,输出两个多项式及相加的结果
#include
#include
typedef struct polynode
{
int coef;
int exp;
struct polynode *next;
}PNode;
PNode *Creat_Linkst(int n);
void PolyAdd(PNode *pa,PNode *pb);
void Print_Linkst(PNode *H);
main()
{
PNode *HA,*HB;
int la,lb;
printf("enter la,lb:");
scanf("%d,%d",&la,&lb);
printf("\ncreat HA\n");HA=Creat_Linkst(la); printf("A(x)=");Print_Linkst(HA);
printf("\ncreat HB\n");HB=Creat_Linkst(lb); printf("B(x)=");Print_Linkst(HB); PolyAdd(HA,HB);
printf("\nA(x)+B(x)=");Print_Linkst(HA); }
PNode *Creat_Linkst(int n)
{
PNode *head,*p,*s;
int i;
head=(PNode*)malloc(sizeof(PNode)); head->next=NULL;
p=head;
printf("enter coef,exp:\n");
for(i=1;i<=n;++i)
{
s=(PNode *)malloc(sizeof(PNode));
scanf("%d,%d",&s->coef,&s->exp);
s->next=NULL;
p->next=s;p=s;
}
return(head);
}
void PolyAdd(PNode *pa,PNode *pb) {
PNode *pre,*qa,*qb,*q;
int sum;
pre=pa;
qa=pa->next;
qb=pb->next;
while(qa&&qb)
{
if(qa->exp==qb->exp)
{
sum=qa->coef+qb->coef;
if(sum){qa->coef=sum;pre=qa;}
else{pre->next=qa->next;free(qa);}
qa=pre->next;
q=qb;qb=qb->next;free(q);
}
}
if(qb)pre->next=qb;
free(pb);
}
void Print_Linkst(PNode *H)
{
PNode *p;
p=H->next;
while(p->next)
{
printf("%d^%d+",p->coef,p->exp);p=p->next;
}
if(p->exp)
printf("%d^%d+",p->coef,p->exp);
else printf("%d\n",p->coef);
}