您的位置:首页 > 理论基础 > 数据结构算法

数据结构之链表实现简单的信息系统

2014-03-24 16:05 369 查看
链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
相比于线性表顺序结构,操作复杂。


线性表的链式存储表示的特点是用一组任意的存储单元存储线性表数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素
与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。



/*题目:学生信息管理系统功能:增加学生信息、删除全部学生信息、删除某1个学生信息、根据姓名查找学生信息并打印、打印所有学生信息 学生信息包含:学号、姓名、住址、数学成绩、计算机成绩*/



#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define man 5
typedef struct  link
{
	int num;
	char *name;
	char *addr;
	double  math;
	double  computer;
	
	struct link *next;
	
}program;

void modify_student(program *);

program *create_link()
{
	program *header;
	header=NULL;
	
	return header; 
}

void add_no(program **head,int num,char *name,char *address,double computer,double math)
{
	program *q=(program *)malloc(sizeof(program));
    program *p2;
	int i=0;
	
	if(q==NULL)
	{
		printf("内存空间不足~\n");
		exit(0);
	}
	
     q->num=num;
     q->math=math;
     q->computer=computer;
    
	q->name=(char *)malloc(strlen(name)+1);
    strcpy(q->name,name);
    
	q->addr=(char *)malloc(strlen(address)+1);
	strcpy(q->addr,address);
	
	q->next=NULL;
	
	if(*head==NULL)
	{
		*head=q;
	}
	else
	{
		p2=*head;
		while(p2->next!=NULL)
		{
			p2=p2->next;
		}
	   p2->next=q;
	}

	return;
}

void link_node(program *head)
{
    program *g=(program *)malloc(sizeof(program));
    g=head;

    int h=0;
    if(g==NULL)
    	printf("error\n");
  
	while(g!=NULL)
	{
		h++;		
		g=g->next;
	}
    printf("%d\n",h);
	//return h;
}

void  destory_link(program **head)
{
	program *h;//=(program *)malloc(sizeof(program));
	h=*head;
	program *h1;
	int j;	
	
	while(h!=NULL)
	{
      	    *head=h->next;
        	free(h);
        	h=NULL;
        	h=*head;
	}

	printf("\n释放内存!\n");
}

void p_link(program *header)
{
	program *p;
	p=header;

	if(p==NULL)
	   {
	      return;
	   }	   
    else
	   {
	      while(p!=NULL)
		  {
		  	 printf("%d %s %s %.2f %.2f ",p->num,p->name,p->addr,p->math,p->computer);
		  	 p=p->next;
		  }
     	} 
	printf("\n"); 	
}

void delete_node(program **head,int num)
{
	program  *h=*head;
    program  *p;
	
	if(*head==NULL)
	{
		 printf("学生信息空");
	}
	while(h!=NULL)
	{	
	      if(h->num==num)
        	{
	        	*head=h->next;
        	    free(h);
        	    h=NULL;
        	    h=*head;
        	    break;
	        }
          
	}
	     return ;
}

void one_student(program *head,char *name)
{
	program *p;
	p=head;
	if(p==NULL)
	{
		printf("内存不足!");
		return ;
	}
	
	if(p!=NULL)
	{
		while(p!=NULL)
		{
			if(strcmp(p->name,name)==0)
			{
			    printf("%d %s %lf %lf",p->num,p->addr,p->math,p->computer);
			}
			p=p->next;
		}
	}
	printf("\n");
}

void modify_student(program *head)
{
	program *h;
	h=head;
	
	while(h!=NULL)
	{
	   if(h->num==101)
	   {
	     h->name="陈峰";
	     break;
	   }
	   else 
	   {
	      h=h->next;	
	   }
	}
}

int main()
{
	int m,i=0,j=0;
    int n;
    char ch;
 
	char *student_name[4]={"张三","lisi","wangwu","sunhai"};
	int student_num=101;//{101,102,103,104};
	char *student_addr[4]={"China","America","England","Frence"};
	double student_computer=56.3;//{53.5,64.8,95.6,75.0};
	double student_math=85.3;//{65.2,78.0,90.5,88.7};  
	
	int number=101;
	int number1=102;
	int number2=103;
	
	char *name="张三";
	char *name1="李四";	
	char *name2="王五";
	
	char  *address="中国";
	char  *address1="美国";
	char  *address2="法国";
	
	double math=65.0;
	double math1=95.1;
	double math2=68.5;
	
	double computer=85.3;
	double computer1=75.5;
	double computer2=85.0;
	
	
	program *header=create_link();
    program *pp;
    pp=header;
    
    while(1)
     {
    	printf("学生信息系统相关功能如下:\n");
    	printf("(1)增加学生信息。\n");
    	printf("(2)删除个别学生信息。\n");
    	printf("(3)删除所有的学生信息.\n");
    	printf("(4)查询学生人数。\n");
    	printf("(5)查找个别人信息。\n");
    	printf("(6)打印所有学生的信息。\n");
    	printf("(7)退出!\n");
    	
    	ch=getchar();
    	switch(ch)
    	{
	    	case '1':
	    	      {
				  printf("增加学生信息。\n");
	    	      add_no(&pp,number,name,address,computer,math);
	    	      add_no(&pp,number1,name1,address1,computer1,math1);
	    	      add_no(&pp,number2,name2,address2,computer2,math2);
	    	      
			 break;
	    	      }
                   
             case '2':
                  {
				     printf("将要删除指定学生信息.\n");
                                          delete_node(&pp,number);
                     break;
                  }
                  
             case '3':
                  {
				     printf("将要删除所有人的信息。\n");
                     destory_link(&pp);
                     p_link(pp);
                     break;
				  }
                  
             case '4':
                  {
				     printf("查询学生人数.\n");
                     link_node(pp);
                     break;
				  }
                  
             case '5':
                  {
				     printf("查询个别人信息。\n");
                                         one_student(pp,"张三");
                     break;
                  }
                  
             case '6':   
				  {
				     printf("查询所有学生信息。\n");
                     p_link(pp);
                     break;
				  }
                  
             case '7':
                   {
				     printf("系统退出!\n");
                     exit(1);
                     break;
                   }
             case '8':
                  {
					printf("修改名字.\n");
                    modify_student(pp);
                    break;
				  }
                   
	    }
	    fflush(stdin);
    }
   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: