20130828C语言编程实践课第八天

来源:互联网 发布:源码安装rrdtool 编辑:程序博客网 时间:2024/05/16 05:07

/******************************************************************第一题****************************************************************/

/*编写程序,先动态开辟结构体空间,然后释放它*/
#include<stdio.h>
#include<stdlib.h>
struct STUDENT{
 char name[20];
 int age;
 int chinese,math;
 struct STUDENT *next;
};

main()
{
 struct STUDENT *s;
 s=(struct STUDENT*)malloc(sizeof(struct STUDENT));
 gets(s->name);
 scanf("%d%d%d",&s->age,&s->chinese,&s->math);
 puts(s->name);
 printf("%d\n%d\n%d\n",s->age,s->chinese,s->math);
 free(s);
}

/******************************************************************第一题****************************************************************/

 

 

 

 

/******************************************************************第二题****************************************************************/

 

/*****************************************链表的创建***************************************************/
/*#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct STUDENT{
 char name[20];
 int age;
 int chinese,math;
 struct STUDENT *next;
};//注意,以后所有的结构体操作都使用都使用这个定义
typedef struct STUDENT STU;
STU *creat_list();
void print_list(STU *head);
main()
{
 STU *head;
 head=creat_list();
 print_list(head);
}
STU *creat_list()//定义创建链表函数
{
 int i=0;
 STU *head,*p,*q;
 head=(STU *)malloc(sizeof(STU));
 head->next=NULL;
 q=head;
 while(i<3)
 {
  p=(STU *)malloc(sizeof(STU));
  printf("input name:");
  gets(p->name);
  printf("input age chinese math:");
  scanf("%d%d%d",&(p->age),&(p->chinese),&(p->math));
  getchar();//滤掉scanf未处理的回车符
  p->next=NULL;
  q->next=p;
  q=p;
  i++;
 }
 
 q->next=NULL;
 return head;
}
void print_list(STU *head)
{
 STU *p;
 p=head->next;//(1)
 while(p!=NULL)//当链表处理还未结束时
 {
  puts(p->name);
  printf("%d%d%d",p->age ,p->chinese,p->math);//(3)
  p=p->next;//(4)
 }
}

STU *search(STU *head,char *who)
{
 STU *p;
 p=head->next;
 while(p!=NULL)
 {
  if(strcmp(p->name,who)==0)//找到
   break;
  else
   p=p->next;
 }
 return p;//若返回值为NULL,则表示没有找到
}
void mydelete(STU *head,char *who)
{
 STU *p,*q;
 q=head;
 while(p!=NULL)
 {
  if(strcmp(p->name,who)==0)//找到
   break;
  else
  {
   p=p->next;
   q=q->next;
  }
 }
 if(p!=NULL)//表示找到了,是经break语句跳出循环的
 {
  q->next=p->next;
  printf("名为%s的同学已被删除。\n",p->name);
  free(p);
 }
 else
  printf("没有名为%s的同学!\n");
}

void myinsert(STU *head,STU *newNode)
{
 STU *p,*q;
 q=head;
 if(head==NULL)
  head=(STU *)(malloc(sizeof(STU)));
 p=head->next;
 while(p!=NULL)
 {
  if(strcmp(p->name,newNode->name)>0)//升序
   break;
  else
  {
   p=p->next;
   q=q->next;
  }
 }
 q->next=newNode;
 newNode->next=p;
}
*/

 

/******************************************************************第二题****************************************************************/

 

 

/**************************************************第三题*******************************************************/
/*typedef struct STUDENT{
 char name[20];
 int age;
 float chinese,math;
 struct STUDENT *next;
}STU;
利用上述结构体,编写一个函数用来创建链表,按姓名升序输入若干学生信息;
找到数学成绩为100分的学生,并将该同学的信息结点删除
插入名为“James”的同学的结点*/
/**************************************************第三题*******************************************************/