链表

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE sizeof(STU)
typedef struct student
{
    int no;
    char name[10];        //姓名要用数组表示
    int n;            //不能用着一变量计数,因为每一个节点n 不同****
    int cj;
    struct student *next;
} STU;
STU * head;
void menu();        //菜单
void choice();        
STU *creat();
STU *cazhao(STU *head);            //创建
STU* add1(STU *head);    //在结尾添加
STU* add2(STU *head);    //在中间加入
STU *del(STU *head);    //删除
STU *destory(STU *head);    //销毁
STU *bianl(STU *head);    //遍历


void menu()
{
    printf("\t\t***********\n");
    printf("\t\t*1创建链表*\n");
    printf("\t\t*2删除链表*\n");
    printf("\t\t*3销毁链表*\n");
    printf("\t\t*4遍历链表*\n");
    printf("\t\t*5增加链表*\n");
    printf("\t\t*6插入链表*\n");
    printf("\t\t*7查找链表*\n");
    printf("\t\t***********\n");
}


void choice()
{
    int i;
    while(1)
    {
        menu();
        printf("please input your chao zuo\n");
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            {
                system("color 65");
                head=creat();  //要有返回值
                break;
            }
        case 2:
            {
                system("color 75");
                del(head);        //传值
                break;
            }
        case 3:
            {
                system("color 63");
                destory(head);    
                break;

            }
        case 4:
            {
                system("color 59");
                bianl(head);    
                break;
            }
        case 5:
            {
                system("color 29");
                 add1(head);    
                break;
            }
        case 6:
            {
                system("color 78");
                 add2(head);    
                break;
            }
        case 7:
            {
                    system("color 78");
                 cazhao(head);    
                break;
            }

        default:
            {
                system("color 45");
                exit(0);
            }
            
        }
        system("color 65");
        system("pause");
        system("cls");
    }
}


STU * creat()
{
/*    printf("输入你要创建的节点数");
    scanf("%d",&i);*/
    STU *p1,*p2;
    
    head=(STU*)malloc(SIZE);
    //head->next =NULL;
    p2=head;
    p1=(STU *)malloc(SIZE);
    p1->n =0;
    scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );//一定要加&
    while(p1->no != NULL)
    {
        (p1->n )++;
    //    p1->next =NULL;
        p2->next =p1;
        p2=p1;
        p1=(STU*)malloc(SIZE);
        scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );
    }
    p2->next =NULL;

    return head;

}


STU *add1(STU *head)
{
//    int i;
//    int j;
    
    STU *node;

    printf("输入你要增加节点的信息");
//    scanf("%d",&i);

    STU *p;
    node=(STU*)malloc(SIZE);
    scanf("%d%s%d",&node->no ,node->name ,&node->cj );
    
    p=head;
    
    while(p->next)
    {
        p=p->next ;
    
    }
    if(p->next == NULL)
    {
        p->next =node;
        node->next =NULL;
        printf("添加成功");
    }

    return(head);

}


STU *add2(STU *head)
{
    STU *p,*q;
    STU *node;
    p=head;
    int m;
    int i;
    printf("输入你要加入的位置");
    scanf("%d",&i);
    node=(STU *)malloc(SIZE);
    scanf("%d%s%d",&node->no ,node->name ,&node->cj );
    m=1;

    while(m!=i)
    {
        m++;
        p=p->next ;
        

    }
    if(m==i)
    {
        node->next =p->next  ;
        p->next =node;
        printf("添加成功");

    }
    return head;
}




STU *del(STU *head)
{
    STU *p,*q;
    int i;
    p=head;
    printf("输入你要删除的成绩");
    scanf("%d",&i);

    while((p->no) !=i)
    {
        q=p;
        p=p->next;
    }

    if((p->no) ==i)
    {
        q->next =p->next ;
        free(p);
        printf("删除成功");
    }
    else
    {
        printf("NONO");
    }
    return head;
}



STU *cazhao(STU *head)
{
    int i=1;
    int n;
    STU *p;
    p=head->next ;
    printf("输入你要查找的节点");
    scanf("%d",&n);
    while(i!=n)
    {

    p=p->next ;
    i++;
    }
    if(i==n)
    {
        printf("%d %s %d\n",p->no,p->name ,p->cj );

    }
    return head;
}



STU *destory(STU *head)
{
    STU *p,*ptr;
    p=head;

    while(p->next !=NULL)
    {
        ptr=p;
        p=p->next ;
        free(ptr);
        ptr->next =NULL;
        printf("销毁成功");
        

    }

    return head;
}





STU *bianl(STU *head)
{
    STU *p;
    p=head;
    printf("便历\n");
    p=p->next ;

    while(p)
    {
        printf("%d  %s  %d\n",p->no ,p->name ,p->cj );
        p=p->next ;
    }

    return head;
}



int main()
{
    choice();
    return 0;

}



***********************
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE (struct student *)malloc(sizeof(struct student))
typedef struct student
{
    int no;
    char name[20];
    float grade;
    struct student *next;
}S;
S *head;


void choice();
void menu1();
S *init();
S *add1(S *head);
S *add2(S *head);
S *seek(S *head);
S *del(S *head);
S *bianli(S *head);
S *destory(S *head);



void menu1()
{
    printf("\t\t\t*****菜单*****\n");
    printf("\t\t\t* 0.增加2链表*\n");//mowei
    printf("\t\t\t* 1.创建链表 *\n");
    printf("\t\t\t* 2.增加1链表*\n");//zhongjian
    printf("\t\t\t* 3.查找链表 *\n");
    printf("\t\t\t* 4.删除链表 *\n");
    printf("\t\t\t* 5.遍历链表 *\n");
    printf("\t\t\t* 6.销毁链表 *\n");
    printf("\t\t\t* 7.退出     *\n");
    printf("\t\t\t**************\n");
}

S *add1(S *head)
{
    int m;
    printf("请输入你增加的位置");
    scanf("%d",&m);
    S *p1,*node;
    node=SIZE;
scanf("%d%s%f",&node->no ,node->name ,&node->grade  );
    node->next =NULL;
    p1=head ;
    while(--m)
    {
        p1=p1->next ;
        
    }
    node->next =p1->next ;
    p1->next =node;
    return head;
    
}

S *add2(S *head)
{
    S *p1,*node;
    p1=head;
    node=SIZE;
scanf("%d %s %f",&node->no ,node->name ,&node->grade  );
    node->next =NULL;
    while(p1->next)
    {
        p1=p1->next;
    }
    if(p1->next==NULL)
    {
    p1->next=node;
    }
    return head;
}


S *del(S *head)
{
    int w;
    printf("请输入你要删除的学号\n");
    scanf("%d",&w);
    S *p1,*p2;
    p2=p1=head;
    while(p1->next)
    {    p2=p1;
        p1=p1->next;
    //    p2=p1;
        if(p1->no==w)
        {
            p2->next=p1->next;
            free(p1);
            break;
        }
    

    }
    return head;
}


S *bianli(S *head)
{
    S *p1;
    p1=head;
        p1=p1->next;
    while(p1->next)
    {
    
        printf("%d %s %f\n",p1->no,p1->name,p1->grade);
            p1=p1->next;
    }
    return head;

}

S *destory(S *head)
{
    S *p1,*p2;
    p2=p1=head;
    p1=p1->next;
    free(p2);
    p2=p1;
    return head;

}
S *init()
{
    S *p1,*p2;
    p1=p2=head=SIZE;
    
    p1=SIZE;
    scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade  );
    p1->next =NULL;
    p2->next =p1;
    p2=p1;
    while(p1->no !=0)
    {
    p1=SIZE;
    scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade  );
    p1->next =NULL;
    p2->next =p1;
    p2=p1;

    }

    return head;
}

S *seek(S *head)
{
    int sno;
    S *p1,*p2;
    p2=p1=head->next ;
    

    printf("请输入你要查找的学号");
    scanf("%d",&sno);
    while(p1->next )
    {
        p1=p1->next ;
        if(p1->no ==sno)
        {
            printf("%d %s %f",p1->no ,p1->name ,p1->grade );
            break;
        }
    }
    return head;
}



void choice()
{
    while(1)
    {
        system("cls");
        
    menu1();
    int n;
    printf("请输入你要进行的操作");
    
    scanf("%d",&n);
    switch(n)
    {
        case 0:
            {
                add2(head);
                break;
            }

        case 1:
            {
                
                head=init();
                printf("创建成功\n");
                break;
            }
            case 2:
            {
                
                add1(head);
                break;
            }
            case 3:
            {
                
                seek(head);
                system("pause");
                break;
            }
            case 4:
            {
                del(head);
                system("pause");
                break;
            }
            case 5 :
            {
                bianli(head);
                system("pause");
                break;
            }
            case 6:
            {
                destory(head);
                printf("销毁成功\n");
                system("pause");

                break;
            }
            case 7:
            {
                exit(0);

                break;
            }

            default :
                {
                    printf("请重新输入");
                    break;
                }

    }    

    }

}

int main()
{
    choice();
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值