链表增删改查系统 全手打- -!终于搞完了

//建立链表管理系统 实现增删改查
#include "stdio.h"
#include "string.h"
#include "malloc.h"
typedef struct node
{
    int    data;
    struct    node *next;
}linklist;

//**********************增加函数
void addLinkList(linklist *p)
{
    int a=1;
    linklist *t=NULL;
    linklist *s=NULL;
    linklist *r=NULL;
    linklist *q=p;//现在 把p的地址传入 q 让 q 作为头结点
    //查看链表

    q=p;
    r=q->next;
    printf("%4d",q->data);
        while(r!=NULL)
    {
        printf("%4d",r->data);
        r=r->next;
        q=q->next;
    }
       


    //现在q是指向链表尾部的指针
    //下面增加链表
        printf("\n请输入要增加的数据");
        s=(linklist *)malloc(sizeof(linklist));
        scanf("%d",&s->data);
        //这里必须将s的后面置空 否则输出增加链表后将无法输出
        if(s!=NULL)
        {
            s->next=NULL;
        }

        q->next=s;
       
    //增加后链表
        t=p;
    while(t!=NULL)
    {
        printf("%4d",t->data);
        t=t->next;
    }
        if(t!=NULL)
        {
            t->next=NULL;
        }
    printf("\n");

   
}
//***************************************删除函数
void  delLinkList(linklist *p)
{
    linklist *q=p;//将q作为头结点
    linklist *s=NULL;
    linklist *n=NULL;
    linklist *r=NULL;
    int j,i=1;
    //输出链表
    while(q->next!=NULL)
    {
        printf("%4d",q->data);
        q=q->next;
    }
    printf("%4d",q->data);
    printf("\n");
    //下面进行删除
    printf("请输入要删除的节点位置");
    scanf("%d",&j);
    q=p;
    r=q->next;
    if(j==1)
    {
        printf("不能删除第一个节点");
       
    }

    n=p;//令n作为头结点
    s=n->next;

     if(j>1)   
    {    while(i<=j)
        {
            i++;
        }
            n->next=s->next;       
            free(s);
        printf("\n%d",n->data);
    }

        while(n!=NULL)
    {
        printf("%4d",n->data);
        n=n->next;
    }
        printf("\n");

}
//*************************************修改函数
void setLinkList(linklist *p)
{
    linklist *q=p;
    linklist *s=NULL;
    linklist *r=NULL;
    int i=1;
    int j=1;
    //输出链表
    while(q!=NULL)
    {
        printf("%4d",q->data);
        q=q->next;
    }
    printf("\n");

    //进行修改
    printf("请输入要修改数据的位置:");
    scanf("%d",&j);
    r=p;
    while(i<j)
    {
        i++;
        r=r->next;
    }
    printf("请输入修改后的数据:");
    scanf("%d",&r->data);
    //输出链表
    q=p;
        while(q!=NULL)
    {
        printf("%4d",q->data);
        q=q->next;
    }
    printf("\n");


}
//**************************************查看函数
void show(linklist *p)
{
    linklist *q;
    q=p;
    while(q!=NULL)
    {
        printf("%4d",q->data);
        q=q->next;
    }
    printf("\n");

}
//***************************************主函数
void main()
{
    //尾插法建立链表
    linklist *h=NULL;
    linklist *p=NULL;
    linklist *r=NULL;
    linklist *s=NULL;
    int c=0;
    int i=1;
        printf("*************欢迎进入链表管理系统*****************\n\n");
        printf("*************请建立链表***************************\n");
    while(c!=-999)
    {
       
        s=(linklist *)malloc(sizeof(linklist));
        printf("*************请输入链表信息(整数)\n");
        scanf("%d",&s->data);
        if(h==NULL)
        {
            h=s;
        }
        else
        {
            r->next=s;
        }
        r=s;
        printf("*************继续输入按1,停止按-999 ");
        scanf("%d",&c);

    }
    if(r!=NULL)
    {
        r->next=NULL;
    }
    //输出链表
    p=h;
    while(p!=NULL)
    {
        printf("%4d",p->data);
        p=p->next;
    }
    printf("\n");
    while(i!=5)
    {
            printf("*************1.增加链表\n");
            printf("*************2.删除链表\n");
            printf("*************3.修改链表\n");
            printf("*************4.查看链表\n");
            printf("*************5.退出\n");
            scanf("%d",&i);

            switch(i)
            {
            case 1:
                addLinkList(h);//调用增加函数
                break;
            case 2:
                delLinkList(h);//调用删除函数
                break;
            case 3:
                setLinkList(h);//调用修改函数
                break;
            case 4:
                show(h);//调用查看函数
                break;
            default:
                break;

            }
    }

    printf("*************退出系统成功 欢迎再次使用*****************\n\n");

}



你可能感兴趣的:(c,struct,null)