单链表的建立出了问题求助[Error] cannot convert 'Node**' to 'LinkList {aka Node*}'

何止。 2017-12-13 11:02:11
#include<stdio.h>
#include<iostream>
#include<cstdio>
using namespace std;
#define MAXSIZE 100
#define ERROR 0
#define OK 1
#include <stdlib.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}
void CreateFormHead(LinkList L)
{
Node *s;
char c;
int flag=1;
int i=0,n;
scanf("请输入单链表元素个数%d",&n);
while(flag&&i<n)
{
c=getchar();
if(c!='$')
{
s=(Node *)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}else flag=0;i++;
}
}
void InsList(LinkList L,int i,ElemType e)
{
Node *pre,*s;
int k;
if(i<=0) exit(0);
pre=L;k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(pre==NULL)
{
printf("插入位置不合理");
exit(0);
}
s=(Node*)malloc(sizeof(Node));
s->data=e;
s->next=pre->next;
pre->next=s;
}
int DelList(LinkList L,int i,ElemType *e)
{
Node *pre,*r;
int k;
pre=L;k=0;
while(pre->next!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(pre->next==NULL)
{
printf("删除结点的位置i不合理!");
return ERROR;
}
r=pre->next;
pre->next=r->next;
* e=r->data;
free(r);
return OK;
}
int print(LinkList L)
{
Node *pre;
pre=L;
while(pre->next!=NULL)
{
pre=pre->next;
cout<<pre->data<<endl;
}
}
main()
{
LinkList L;
ElemType e;
int i,t;
printf("单链表操作顺序:(1.初始化($为结束标志)2.插入3.删除)");
InitList(&L);
print(L);
scanf("请输入要插入的顺序表元素%d和位置%d",&e,&i);
t=InsList(&L,i,e);
if(t)
{
printf("插入后的顺序表为");
print(L);
}
else
printf("插入失败!");
scanf("请输入要删除的顺序表元素%d和位置%d",&e,&i);
t=DelList(&L,i,e);
if(t)
{
printf("删除后的顺序表为");
print(L);
}
else
printf("删除失败!");
return 0;
}

...全文
5408 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define MAXSIZE 100
#define ERROR 0
#define OK 1

typedef int ElemType;
typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node,*LinkList;

void InitList(LinkList *L)
{
    *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;
}

#if 0
void CreateFormHead(LinkList L)
{
    Node *s;
    char c;
    int flag=1;
    int i=0,n;
    printf("请输入单链表元素个数: ");
    scanf("%d", &n);
    getchar();    /* for '\n' */
    while(flag&&i<n)
    {
        c=getchar();
        if(c != '$')
        {
            s=(Node *)malloc(sizeof(Node));
            s->data=c;
            s->next=L->next;
            L->next=s;
        }else
            flag=0;
        i++;
    }
}
#endif

int InsList(LinkList *L, int i, ElemType e)
{
    Node *pre,*s;
    int k;

    if(i <= 0)
        exit(0);
    pre = *L;
    k=0;
    while(pre && k < i-1)
    {
        pre = pre->next;
        k = k+1;
    }
    if(pre==NULL)
    {
        printf("插入位置不合理\n");
        return ERROR;
    }
    s = (Node*)malloc(sizeof(Node));
    s->data = e;
    s->next = pre->next;
    pre->next = s;

    return OK;
}

int DelList(LinkList *L,int i,ElemType *e)
{
    Node *pre,*r;
    int k = 0;
    pre = *L;

    k=0;
    while(pre->next && k<i-1)
    {
        pre = pre->next;
        k=k+1;
    }
    if(pre->next==NULL)
    {
        printf("删除结点的位置i不合理!");
        return ERROR;
    }
    r = pre->next;
    pre->next = r->next;
    *e = r->data;
    free(r);
    return OK;
}
int print(LinkList L)
{
    if (!L)
        return ERROR;
    Node *pre;
    pre = L->next;
    while(pre) {
        cout<<pre->data<<endl;
        pre=pre->next;
    }

    return OK;
}
int main()
{
    LinkList L;
    ElemType e;
    int pos, ret, ch;
    InitList(&L);
    //print(L);

    while (1) {
        printf("单链表操作顺序:(1.插入 2.删除, 3.exit)\n");
        scanf("%d", &ch);
        switch (ch) {
            case 1:
                printf("请输入要插入的顺序表元素和位置: ");
                scanf("%d%d", &e, &pos);
                ret = InsList(&L, pos, e);
                if (ret) {
                    printf("插入后的顺序表为");
                    print(L);
                } else {
                    printf("插入失败!");
                }
                break;

            case 2:
                printf("请输入要删除的顺序表元素和位置: ");
                scanf("%d%d", &e, &pos);
                ret = DelList(&L, pos, &e);
                if (ret) {
                    printf("删除后的顺序表为: ");
                    print(L);
                } else {
                    printf("删除失败!\n");
                }
                break;

            case 3:
                return 0;
        }
    }

    return 0;
}

参考一下吧,问题比较多。 我在你的基础改了一下;
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
scanf("请输入要插入的顺序表元素%d和位置%d",&e,&i);
这个是做什么的?是不是应该这样:
scanf("请输入要插入的顺序表元素和位置: ");
    scanf("%d%d", &e, i);
同理还有这句:
scanf("请输入单链表元素个数%d",&n);
同理还有这句:
scanf("请输入要删除的顺序表元素%d和位置%d",&e,&i);
改为:
printf("请输入要删除的顺序表元素和位置: ");
    scanf("%d%d", &e, &i);
sky065530 2017-12-14
  • 打赏
  • 举报
回复
DelList(&L,i,e)这句也不对,应该是DelList(L,i,e)
sky065530 2017-12-14
  • 打赏
  • 举报
回复
按照你的定义,t=InsList(&L,i,e); 这句的第一个参数不对,应该是t=InsList(L,i,e);

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧