河北师大软件学院第18次作业

来源:互联网 发布:人在德国上淘宝 编辑:程序博客网 时间:2024/04/30 01:35
/*******************************************        任务:带头结点的链表,删除,增添,查找        时间:2015年6月30日00:13:03********************************************/# include <stdio.h># include <malloc.h># include <string.h>/*定义结构体*/typedef struct student{    char name[20];    int score;    struct student *Next;}STU,*List;/*创建接收学生信息*/int i=0;const List stuList(){    List temp,temp1 = NULL;     char names[20];    List pHeader = (List)malloc(sizeof(STU));       //创建头结点    pHeader -> Next = NULL;    while(1)    {        printf("请输入第%d个学生信息(直接回车停止输入学生信息):\n",++i);        printf("\n\t姓名:");        fflush(stdin);        gets(names);                        //接收字符串        if(!strlen(names))            break;        temp = (STU*) malloc(sizeof(STU)); //创建新节点        strcpy(temp -> name , names);        printf("\t成绩:");        scanf("%d",&temp -> score);        temp->Next = 0;        printf("\n");        if( !pHeader -> Next)        {            pHeader -> Next = temp;        }        else        {            temp1 -> Next = temp;        }        temp1 = temp;    }    return pHeader;}/*输出学生成绩单*/void print(List head){    List p = head -> Next;    printf("\n\t姓名\t\t成绩\n");    while(p)    {        printf("\t%s\t\t%d\n",p -> name,p -> score);        p = p -> Next;    }    printf("\n");}/*查找成员*/List find(List head){    List p = head -> Next;    char fname[20];    printf("\n请输入您要修改或删除的学生的姓名:");    fflush(stdin);    gets(fname);    for(p = head ;p != NULL;p = p -> Next)    {        if( 0 == strcmp(p -> name,fname))        {            return p;        }    }    if(p == NULL)        return 0;}/*修改成员信息*/int findAndEdit(List head){    List p = head -> Next;    int a;    p = find(head);    if(p)    {        printf("\n请输入修改后的成绩:");        scanf("%d",&a);        p -> score = a;        if(p -> score == a)            printf("\n修改成功\n");        return 1;    }    else    {        printf("\n未找到该成员信息,不能修改\n\n");        return 0;    }}/*链表结尾插入*/int insert (List head,List pNew){    List p = head -> Next;    while(p -> Next)    {        p = p -> Next;    }    p -> Next= pNew;    if(p -> Next == pNew)        printf("添加成功\n");}/*删除指定节点*/int deleteNode(List head){    List p = head;    List temp = NULL;    temp = find(head);    if(temp == NULL)    {        printf("\n未找到该成员信息,不能删除\n\n");        return;    }    for(;p!=NULL;p = p -> Next)    {        if(p -> Next == temp)        {            p -> Next = temp -> Next;        }    }    printf("\n删除成功\n\n");}/*释放内存*/void freeList(List pH){  List p = NULL;  printf("FreeList\n");  while(NULL != pH)  {    p = pH;    pH = pH->Next;    free(p);  }}int main (void){    const List head = stuList();    int m;    STU pNew;    char Nwname[20];    printf("\n======================成绩表单======================\n");    print(head);    printf("\n====================================================\n");    /*末尾添加节点*/    printf("\n请输入在结尾处添加新节点的信息\n\n");    printf("\t姓名:");    fflush(stdin);    gets(Nwname);    strcpy(pNew.name , Nwname);    printf("\t成绩:");    scanf("%d",&pNew.score);    printf("\n");    pNew.Next = NULL;    insert(head,&pNew);    printf("\n==================添加后的成绩表单==================\n");    print(head);    printf("====================================================\n\n");    /*删除节点*/    deleteNode(head);    printf("\n==================删除后的成绩表单==================\n");    print(head);    printf("====================================================\n\n");    /*修改学生成绩*/    m = findAndEdit(head);    if(m != 0)    {        printf("\n==================修改后的成绩表单==================\n");        print(head);        printf("====================================================\n\n");    }    freeList(head);    return 0;}
0 0
原创粉丝点击