<C语言创建链表,函数调用部分-百科大全-满米百科
> 百科大全 > 列表
C语言创建链表,函数调用部分
时间:2024-12-23 17:10:44
答案

#include

#include

#include

#include

#include

//定义数据类型名称

typedef int DataType;

#define flag -1        //定义数据输入结束的标志数据

//单链表结点存储结构定义

typedef struct Node

{

    DataType data;

    struct Node *next;

}LNode ,*LinkList;

//建立单链表子函数

 LNode *Create_LinkList()

{

    LNode *s,*head,*L;int i=0,x;        //定义指向当前插入元素的指针

    while(1)

    {

        scanf("%d",&x);

        if(-1==x)

        {   return head;

            break;}

        s= (LNode *)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

        s->data =x;

        s->next =NULL;

        i++;

        if(i==1)

            head=s;

        else

            L->next =s;

            L=s;

    }

}

//查找子函数(按序号查找)

LNode *Get_LinkList(LinkList L,int i)

{

    LNode *p;

    int j;        //j是计数器,用来判断当前的结点是否是第i个结点

    p=L;

    j=1;

    while(p!=NULL&&j

    {

        p=p->next ;        //当前结点p不是第i个且p非空,则p移向下一个结点

        j++;

    }

    return p;

}

//插入运算子函数

void Insert_LinkList(LinkList L,int i,DataType x)        //在单链表L中第i个位置插入值为x的新结点

{

    LNode *p,*s;

    p =Get_LinkList(L,i);        //寻找链表的第i-1个位置结点

    if(p==NULL)

    {

        printf("插入位置不合法!");

        exit(-1);

    }

    else

    {

        s= (LinkList)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

        s->data =x;

        s->next =p->next ;

        p->next =s;

    }

}

//单链表的删除运算子函数

void Delete_LinkList(LinkList L,int i)        //删除单链表上的第i个结点

{

    LNode *p,*q;

    p=Get_LinkList(L,i-1);        //寻找链表的第i-1个位置结点

    if(p==NULL)

    {

        printf("删除的位置不合法!");        //第i个结点的前驱结点不存在,不能执行删除操作

        exit(-1);

    }

    else

    {

        if(p->next ==NULL)

        {

            printf("删除的位置不合法!");        //第i个结点不存在,不能执行删除操作

            exit(-1);

        }

        else

        {

            q=p->next ;

            p->next =p->next->next;

            free(q);

        }

    }

}

//求表长运算子函数

int Length_LinkList(LinkList L)

{

    int l;        //l记录L的表长

    LNode *p;

    p=L;

    l=1;

    while(p->next)

    {

        p=p->next;

        l++;

    }

    return l;

}

int main ()

{

    LNode *head,*p;

    head=(LinkList)malloc(sizeof(LNode));

    int x,y;

    a:

    printf("*******menu*******\n");

    printf("**创建**********1*\n");

    printf("**插入**********2*\n");

    printf("**删除**********3*\n");

    printf("**表长**********4*\n");

    printf("**清屏**********5*\n");

    printf("**打印**********6*\n");

    printf("**退出******other*\n");

    printf("******************\n");

    int i=1;

    while(i)

    {

        printf("请输入选项:");

        scanf("%d",&i);

        switch(i)

        {

            case 1:head=Create_LinkList(); getchar();break;

            case 2:printf("请输入位置和数据;");

            scanf("%d%d",&x,&y);

            Insert_LinkList(head,x,y);break;

            case 3:printf("请输入位置;");

                scanf("%d",&x);

                Delete_LinkList(head,x);break;

            case 4:printf("%d",Length_LinkList(head));break;

            case 5:system("cls");goto a;

            case 6:p=head;

        while(p!=NULL)

                {printf("%d\n",p->data);

                p=p->next;}

                break;

            default :i=0;

        }

    }

}

我把创建给改了一下

推荐
© 2024 满米百科