您的位置:首页 > 编程语言 > C语言/C++

华清远见C语言学习笔记十

2012-07-07 15:45 127 查看
/*

* test.c

*

* Created on: Jun 29, 2012

* Author: 孙旭

* 华清远见实验室

*/

/*单链表*/

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#include<string.h>

static int number=0;

/*定义一个结构体*/

typedef struct student{

char name[50]; //学生姓名

char student_id[50]; //学生学号

int age; //学生年龄

char gender[30]; //学生性别

struct student *next; //结构提指针

}std;

/*创建一个单恋表*/

std *student_create() //node表示节点个数 函数的返回值为std类型

{

int node;

printf("-----enter your informetion-----\n");

printf("enter Statistical student number\n");

scanf("%d",&node);

std *head,*p,*q;

if((p=(std*)malloc(sizeof(std)))==NULL) //创建第一个节点

{

printf("An error occurred when malloc new node\n");

exit(0);

}

printf("---please enter your:name student_id age gender---\n");

scanf("%s %s %d %s",p->name,p->student_id,&p->age,p->gender); //输入学生信息

head=p;

p->next=NULL;

while(--node)

{

if((q=(std *)malloc(sizeof(std)))==NULL) //创建第二个节点

{

printf("An error occurred when malloc new node\n");

exit(0);

}

scanf("%s %s %d %s",q->name,q->student_id,&q->age,q->gender); //输入node-1个学生的信息

p->next=q;

p=q;

p->next=NULL;

}

return head; //返回头节点

}

/*显示学生信息*/

void student_show(std *head)

{

std *p=head;

printf("----Show students' information----\n");

while(p!=NULL) //最后一个节点的后面为空

{

printf("%s\t%s\t%d\t%s\n",p->name,p->student_id,p->age,p->gender);

p=p->next;

}

}

/*在单恋表中插入nu个学生的信息*/

std *student_insert(std *head)

{

printf("----Insert student information---\n");

printf("Insert student information number\n");

int nu;

scanf("%d",&nu);

std *current;

current=head;

std *x;

x=NULL;

printf("---please enter your:name student_id age gender---\n");

while(head->next!=NULL) //按名字插入学生信息

{

head=head->next;

}

while(nu--)

{

if((x=(std *)malloc(sizeof(std)))==NULL)

{

printf("--An error occurred when malloc new node--\n");

exit(0);

}

scanf("%s %s %d %s",x->name,x->student_id,&x->age,x->gender);

x->next=NULL;

//printf("wo ai ni0\n");

//x->next=head->next;

head->next=x;

number++;

head=x;

//printf("wo ai ni\n");

}

return current;

}

/*删除指定的学生信息*/

std *student_delete(std *head)

{

char student_name[20];

printf("--please enter delete name--\n");

scanf("%s",student_name);

std *p;

std *return_value;

p=head;

return_value=head;

while((strcmp(head->name,student_name)!=0)&&(head!=NULL))

{

p=head;

head=head->next;

}

if(p==NULL)

{

printf("the list no %s\n",student_name);

}

else

{

if (p==head)

{

head = head->next;

free(p);

}

else

{

p->next=head->next;

free(head);

}

}

number--;

return return_value;

}

/*查找学生的信息*/

void student_find(std *head)

{

printf("--please enter search name--\n");

char student_name[20];

scanf("%s",student_name);

std *p;

std *return_value;

p=return_value=head;

while((strcmp(head->name,student_name)!=0)&&(head!=NULL))

{

p=head;

head=head->next;

}

printf("-----Search results-----\n");

printf("%s %s %d %s\n",head->name,head->student_id,head->age,head->gender);

}

void menu()

{

printf("====================================\n");

printf("+----------1:创建一个学生信息系统-----+\n");

printf("+----------2:插入学生信息------------+\n");

printf("+----------3:删除学生信息------------+\n");

printf("+----------4:查找学生信息------------+\n");

printf("+----------5:显示学生信息------------+\n");

printf("+----------0:退出-------------------+\n");

printf("====================================\n");

printf("\n");

printf("+ + + + +请选择:+ + + + +\n");

}

int main()

{

int choice;

std *head=NULL;

int len;

len=sizeof(struct student);

while(1)

{

menu();

scanf("%d",&choice);

switch(choice)

{

case 1:

head=student_create();break;

case 2:

head=student_insert(head);break;

case 3:

head=student_delete(head); break;

case 4:

student_find(head); break;

case 5:

student_show(head); break;

case 0:

exit(0);

default:

printf("~~~choice error~~~\n");

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: