鱼C论坛

 找回密码
 立即注册
查看: 2106|回复: 1

链表方面的问题,需要实现一些功能,程序实现不了,求大佬给点提示

[复制链接]
发表于 2020-2-19 16:15:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0

typedef int Elemtype;
typedef struct node
{
    int data;
    struct node *next;
}node;

void mianban()  //提示信息
{
    printf("选择执行下列操作:\n");
    printf("1.建立线性链表;\n");
    printf("2.显示链表;\n");
    printf("3.插入一个结点;\n");
    printf("4.删除一个结点;\n");
    printf("5.查询结点数据;\n");
    printf("6.查询数据结点;\n");
}

int CreateList(node *L,Elemtype e)  //建立链表
{
    node *s;
    L=(node*)malloc(sizeof(node));
    if(!L)
    {
        return ERROR;
    }
    L->next=NULL;
    while(e)
    {
        s=(node*)malloc(sizeof(node));
        if(!s)
        {
            return ERROR;
        }
        s->data=e;
        s->next=L->next;
        L->next=s;
        scanf("%d",&e);
    }
    return L;
}

int ListLength(node *L)     //计算链表长度
{
    node *p;
    int i=0;
    p=L->next;
    while(p!=NULL)
    {
        p=p->next;
        i++;
    }
    return i;
}

void ListInsert(node *L,int i,Elemtype e)   //链表插入节点
{
    node *p,*s;
    int n,L_length;
    p=L;
    L_length=ListLength(L);
    if(i>0&&i<=L_length+1)
    {
        for(n=0;n<i-1;i++)
        {
            p=p->next;
        }
        s=(node*)malloc(sizeof(node));
        if(!s)
        {
            return ERROR;
        }
        s->data=e;
        s->next=p->next;
        p->next=s;
    }
    else
        return ERROR;
}

void ListDelete(node *L,int i)  //链表删除节点
{
    node *p,*s;
    int n,L_length;
    p=L;
    L_length=ListLength(L);
    if(i>0&&i<=L_length)
    {
        for(n=0;n<i-1;i++)
        {
            p=p->next;
        }
        s=p->next;
        p->next=s->next;
        free(s);
    }
}

int GetElem(node *L,int i,Elemtype *e)  //查询链表结点并返回数据
{
    node *p;
    int n,L_length;
    p=L;
    L_length=ListLength(L);
    if(i>0&&i<=L_length)
    {
        for(n=0;n<i;i++)
        {
            p=p->next;
        }
        e=p->data;
    }
    return e;
}

void ClearList(node *L)     //清空链表
{
    node *p,*s;
    int i,L_length;
    L_length=ListLength(L);
    p=L;
    for(i=0;i<L_length;i++)
    {
        s=p->next;
        p->next=s->next;
        free(s);
    }
}

int LocateElem(node *L,Elemtype e,int n)    //查询结点在第几位
{
    node *p,*s;
    int i;
    int L_length=ListLength(L);
    if(L->next==NULL)
    {
        return ERROR;
    }
    p=L->next;s=L;
    for(i=1;p->data!=e&&i<=L_length;i++)
    {
        p=p->next;
        s=s->next;
    }
    if(s->data!=e&&i==L_length)
    {
        i=0;
    }
    return i;
}

void XsList(node *L)    //显示链表
{
    int i;
    node *p;
    p=L->next;
    while(p->next!=NULL)
    {
        printf("%d->",p->data);
        p=p->next;
    }
    printf("%d",p->data);
}

int main()
{
    int e,i,n;
    int *m;
    node *L;
    while(1)
    {
        printf("\n");
        mianban();
        printf("\n");
        scanf("%d",&n);
        switch(n)
        {
        case 1:
            scanf("%d",&e);
            CreateList(L,e);
            XsList(L);
            break;
        case 2:
            XsList(L);
            break;
        case 3:
            scanf("%d",&i);
            scanf("%d",&e);
            ListInsert(L,i,e);
            XsList(L);
            break;
        case 4:
            scanf("%d",&i);
            ListDelete(L,i);
            XsList(L);
            break;
        case 5:
            scanf("%d",i);
            GetElem(L,i,*m);
            printf("%d",m);
            break;
        case 6:
            scanf("%d",i);
            LocateElem(L,i,e);
            printf("%d",e);
            break;
        }
    }

    return 0;
}
调试的时候发现问题基本上出现在p->next,L->next上,可能是指针方面的问题,求大佬们指点!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 08:54:53 | 显示全部楼层
连具体的问题都不描述一下,有什么需要指点的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表