honglili_ya 2021-04-02 21:20 采纳率: 25%
浏览 60
已采纳

数据结构c,这个怎么调用creatListR那个函数网里面输入东西啊

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define  ERROR 0
typedef struct Lnode{
int data;    //数据域
struct Lnode *next;  //指针域
}Lnode,*Linklist;  //*Linklist为Lnode类型的指针

  Linklist createListR(void)
{
    int i=0;
    int ch,N;
    Linklist *L=(Linklist)malloc(sizeof(Lnode));//建立表头节点分配存储空间
    Lnode *q,*r=L;
    printf("请输入%d个整数构建单链表:\n",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&ch);
        q=(Lnode*)malloc(sizeof(Lnode));
        q->data=ch;
        r->next=q;
        r=q;   //插到表末端,让r回到最后一个作为末节点。
    }
    r->next=NULL;
    return L;
}


     int  ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
    {
     int j;
     Lnode *p;
     p=L;
     j=0;
     while(p&&j<i-1)//遍历并且进行第i-1个位置的查找
     {
         p=p->next;
         ++j;
     }
     if(!p||j>i-1)//如果找不到的话就返回error
     {
         return ERROR;
     }
     Lnode *S=(Linklist)malloc(sizeof(Lnode));
     S->data=e;
     S->next=p->next;
     p->next=S;
     }


     int ListDelete(Linklist *L,int i,int *e)//单链表的删除
     {
         int j;
         Lnode *p,*q;
         p=L;
         j=0;
         while(p->next&&j<i-1)//寻找第i-1个元素
         {
             p=p->next;
             ++j;
         }
         if(!p||j>i-1)//删除位置不合理,找不到元素
            {
                return ERROR;
            }
            q=p->next;//删除并释放结点
            p->next=q->next;
            free(q);
     }

int main()
{
      Linklist createListR(void);
    int i,select;
  int *e;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));

printf("宏立:请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2\n");
scanf("%d",&select);
if(select==1)
{
     ListInsert(L,i,e);
}
if(select==0)
{
    ListDelete(L,i,e);
}
    return 0;
}
 

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define  ERROR 0
typedef struct Lnode{
int data;    //数据域
struct Lnode *next;  //指针域
}Lnode,*Linklist;  //*Linklist为Lnode类型的指针

  Linklist createListR(void)
{
    int i=0;
    int ch,N;
    Linklist *L=(Linklist)malloc(sizeof(Lnode));//建立表头节点分配存储空间
    Lnode *q,*r=L;
    printf("请输入%d个整数构建单链表:\n",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&ch);
        q=(Lnode*)malloc(sizeof(Lnode));
        q->data=ch;
        r->next=q;
        r=q;   //插到表末端,让r回到最后一个作为末节点。
    }
    r->next=NULL;
    return L;
}


     int  ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
    {
     int j;
     Lnode *p;
     p=L;
     j=0;
     while(p&&j<i-1)//遍历并且进行第i-1个位置的查找
     {
         p=p->next;
         ++j;
     }
     if(!p||j>i-1)//如果找不到的话就返回error
     {
         return ERROR;
     }
     Lnode *S=(Linklist)malloc(sizeof(Lnode));
     S->data=e;
     S->next=p->next;
     p->next=S;
     }


     int ListDelete(Linklist *L,int i,int *e)//单链表的删除
     {
         int j;
         Lnode *p,*q;
         p=L;
         j=0;
         while(p->next&&j<i-1)//寻找第i-1个元素
         {
             p=p->next;
             ++j;
         }
         if(!p||j>i-1)//删除位置不合理,找不到元素
            {
                return ERROR;
            }
            q=p->next;//删除并释放结点
            p->next=q->next;
            free(q);
     }

int main()
{
      Linklist createListR(void);
    int i,select;
  int *e;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));

printf("请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2\n");
scanf("%d",&select);
if(select==1)
{
     ListInsert(L,i,e);
}
if(select==0)
{
    ListDelete(L,i,e);
}
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 小白小白你好菜 2021-04-03 16:22
    关注

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node{
        int data;
        struct node* next;
    }Node, *LinkList;

    void InitList(LinkList *L);//初始化空链表
    int LengthList(LinkList L);//求链表长度
    void TailList(LinkList L);//尾插法建立链表数据
    void HeadList(LinkList L);//头插法建立链表数据
    int GetData(LinkList L, int i);//获得第i个位置的数据
    int GetLocate(LinkList L, int data);//查找第一次出现数据data的位置
    void InsList(LinkList L, int i, int data);//在第i个位置插入数据data
    void DelList(LinkList L, int i);//删除第i个元素
    void DestroyList(LinkList L);//销毁链表L
    bool EmptyList(LinkList L);//判断是否为空 
    void PrintList(LinkList L);//打印链表L
    LinkList MergeLinkList(LinkList A, LinkList B);//按从小到大合并链表A,B

    int main(){
        LinkList head, linkB;
        int i, data;
        InitList(&head);//head初始化 
        InitList(&linkB);//linkB初始化 
        TailList(head);//尾插法建立链表head
        HeadList(linkB);//头插法建立链表linkB
        printf("尾插法链表如下,长度为%d:\n", LengthList(head)); 
        PrintList(head);//打印链表head
        printf("头插法链表如下,长度为%d:\n", LengthList(linkB));
        PrintList(linkB);
        printf("请输入想查看链表head数据的位置:\n");
        scanf("%d", &i);
        printf("head链表中第i个位置数据为:%d\n", GetData(head, i));
        printf("请输入想查看链表head的数据:\n");
        scanf("%d", &data);
        printf("head链表中数据为data的第一个位置为:%d\n", GetLocate(head, data)); 
        printf("请输入插入位置以及数据:\n");
        scanf("%d %d", &i, &data);
        InsList(head, i, data);
        PrintList(head);
        printf("请输入想删除的数据位置:\n");
        scanf("%d", &i);
        DelList(head, i);
        PrintList(head);
        head = MergeLinkList(head, linkB);
        PrintList(head);
        DestroyList(head);
        PrintList(head);
    }

    void InitList(LinkList *L){//初始化空链表
        *L = (LinkList)malloc(sizeof(Node));
        (*L)->next = NULL;
    }

    void TailList(LinkList L){//尾插法建立链表 
        Node *r, *temp;
        r = L;
        int data;
        printf("尾插法建立链表,-1结束\n");
        scanf("%d", &data);
        while(data != -1){
            temp = (Node *)malloc(sizeof(Node));
            temp->data = data;
            r->next = temp;
            r = temp;
            scanf("%d", &data);
        }
        r->next = NULL;
    }

    void HeadList(LinkList L){//头插法建立链表 
        Node *h, *temp;
        h = L;
        int data;
        printf("头插法建立链表,-2结束\n");
        scanf("%d", &data);
        while(data != -2){
            temp = (Node *)malloc(sizeof(Node));
            temp->data = data;
            temp->next = h->next;
            h->next = temp;
            scanf("%d", &data);
        }
    }

    int LengthList(LinkList L){//返回链表长度,不包括头结点 
        Node *p = L->next;
        int length = 0;
        if(EmptyList(L))
            printf("空链表!求长错误!\n");
        else
            while(p != NULL){
                length++;
                p = p->next;
            }
        return length;
    }

    bool EmptyList(LinkList L){//判断单链表是否为空 
        Node *p = L;
        if(L->next == NULL)
            return true;
        else
            return false;
    }

    int GetData(LinkList L, int i){//获得第i个位置的数据
        Node *p = L->next;
        int locate = 1;
        int data = -1;
        if(i <= 0 || i > LengthList(L))
            printf("位置不在链表范围!\n");
        else{
            while(p != NULL){
                if(locate == i){
                    data = p->data;
                    break;
                }else{
                    p = p->next;
                    locate++;
                }
            }
        }
        return data;

    int GetLocate(LinkList L, int data){//找第一次出现数据data的位置
        int i = 1, locate = -1;
        Node *p = L->next;
        while(p != NULL){
            if(p->data != data){
                i++;
                p = p->next;
            }else{
                locate = i;
                break;
            }
        }
        if(p == NULL)
            printf("该数据未在此链表中出现!\n");
        return locate;
    }

    void InsList(LinkList L, int i, int data){//在第i个位置插入数据data
        Node *pre = L, *tmp;
        int k = 0;
        if(i <= 0 || i > LengthList(L)+1)
            printf("插入位置异常,插入操作无效!\n");
        else{
            while(k++ < i-1)
                pre = pre->next;
            tmp = (Node *)malloc(sizeof(Node));
            tmp->data = data;
            tmp->next = pre->next;
            pre->next = tmp;
        }
    }

    void DelList(LinkList L, int i){//删除第i个元素
        Node *pre = L, *tmp;
        int k = 0;
        if(i <= 0 || i > LengthList(L))
            printf("删除位置异常,删除操作无效!\n");
        else{
            while(k++ < i-1)
                pre = pre->next;
            tmp = pre->next;
            pre->next = tmp->next;
            free(tmp);
        }
    }

    void PrintList(LinkList L){//打印链表L 
        if(EmptyList(L)){
            printf("此链表为空!\n");
        }else{
            Node *p = L->next;
            while(p != NULL){
                printf("%d ", p->data);
                p = p->next;
            }
            printf("\n");
        }
    }

    LinkList MergeLinkList(LinkList A, LinkList B){//按从小到大合并链表A,B
        Node *pa, *pb;
        LinkList C, r;
        pa = A->next;
        pb = B->next;
        r = C = A;
        while(pa != NULL && pb != NULL)
            if(pa->data < pb->data){
                C->next = pa;
                C = pa;
                pa = pa->next;
            }else{
                C->next = pb;
                C = pb;
                pb = pb->next;
            }
        if(pa != NULL)
            C->next = pa;
        else
            C->next = pb;
        free(B);
        return r;
    }

    void DestroyList(LinkList L){//销毁链表L
        L->next = NULL;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器