| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3136 人关注过本帖
标题:不懂,这个代码哪里错了,怎么改
只看楼主 加入收藏
我的小猪猪
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-10-2
收藏
 问题点数:0 回复次数:2 
不懂,这个代码哪里错了,怎么改
#include <stdio.h>
#include <stdlib.h>

#define ERROR NULL
typedef enum { FALSE, TRUE } BOOL;
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

List MakeEmpty();
Position Find(List L, ElementType X);
bool Insert(List L, ElementType X, Position P);
bool Delete(List L, Position P);

int main()
{
    List L;
    ElementType X;
    Position P;
    int N;
    bool flag;

    L = MakeEmpty();
    scanf("%d", &N);
    while (N--) {
        scanf("%d", &X);
        flag = Insert(L, X, L->Next);
        if (flag == false) printf("Wrong Answer\n");
    }
    scanf("%d", &N);
    while (N--) {
        scanf("%d", &X);
        P = Find(L, X);
        if (P == ERROR)
            printf("Finding Error: %d is not in.\n", X);
        else {
            flag = Delete(L, P);
            printf("%d is found and deleted.\n", X);
            if (flag == false)
                printf("Wrong Answer.\n");
        }
    }
    flag = Insert(L, X, NULL);
    if (flag == false) printf("Wrong Answer\n");
    else
        printf("%d is inserted as the last element.\n", X);
    P = (Position)malloc(sizeof(struct LNode));
    flag = Insert(L, X, P);
    if (flag == true) printf("Wrong Answer\n");
    flag = Delete(L, P);
    if (flag == true) printf("Wrong Answer\n");
    for (P = L->Next; P; P = P->Next) printf("%d ", P->Data);
    return 0;
}
List MakeEmpty(){
    List L;
    L = (List)malloc(sizeof(struct LNode));
    L->Next = NULL;
    return L;

}
Position Find(List L, ElementType X){
    Position p;
    if (L == NULL)
        return ERROR;
    while (L != NULL){
        if (L->Data == X){
            p = L;
            return p;
        }
        L = L->Next;
    }
    return ERROR;

}
bool Insert(List L, ElementType X, Position P){
    List tmp = L;
    List apply = NULL;
    if (L == P){
        apply = (List)malloc(sizeof(struct LNode));
        apply->Data = X;
        apply->Next = P;
        tmp = apply;
        return tmp;
    }
    while (L->Next != P && L->Next != NULL){
        L = L->Next;
        if (L->Next == NULL&&P != NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        else{
            apply = (List)malloc(sizeof(struct LNode));
            apply->Data = X;
            L->Next = apply;
            apply->Next = P;
            return tmp;

        }
    }
  bool Delete(List L, Position P){   
         List tmp = L;
        if (L == NULL || P == NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        if (L = P){
            tmp = L->Next;
            free(L);
            return tmp;
        }
        while (L->Next != P&&L->Next != NULL)
            L = L->Next;
        if (L->Next == NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        else{
            L->Next = P->Next;
            free(P);
            return tmp;
        }
    }









搜索更多相关主题的帖子: include 
2016-10-02 13:57
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
编译报错:在bool Delete(List L,Position P){  前一行少了一个}  也就是Insert()函数的花括号不匹配。不上就没错了。
..
至于如果运行结果和你想要的不一样的话,我就无能为力了。第一没题目,第二没测试样例,,,恕我无能为力。



φ(゜▽゜*)♪
2016-10-02 18:05
陈CDG
Rank: 2
等 级:论坛游民
帖 子:17
专家分:57
注 册:2016-4-11
收藏
得分:0 
我帮你标出了错误的地方,已经可以运行,至于功能,和你写的算法有关(自己修改)
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include <stdio.h>
#include <stdlib.h>

#define ERROR NULL
typedef enum { FALSE, TRUE } BOOL;
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

List MakeEmpty();
Position Find(List L, ElementType X);
bool Insert(List L, ElementType X, Position P);
bool Del(List L, ElementType X);

int main()
{
    List L;
    ElementType X;
    Position P;
    int N;
    bool flag;

    L = MakeEmpty();
    scanf("%d", &N);
    while (N--) {
        scanf("%d", &X);
        flag = Insert(L, X, L->Next);
        if (flag == false) printf("Wrong Answer\n");
    }
    scanf("%d", &N);
    while (N--) {
        scanf("%d", &X);
        P = Find(L, X);//既然都找到地址了那就可以直接删除,为何还要多此一举,再用delete来删
        if (P == ERROR)
            printf("Finding Error: %d is not in.\n", X);
        else {
//            flag = Delete(L, P);//你的Delete是错的,其实你直接可以用Find 实现删除的
            flag = Del(L, X);//我只是用Find的代码加上个删除实现你想实现的功能
            printf("%d is found and deleted.\n", X);
          if (flag == false)
                printf("Wrong Answer.\n");
        }
    }
    flag = Insert(L, X, NULL);
    if (flag == false) printf("Wrong Answer\n");
    else
        printf("%d is inserted as the last element.\n", X);
    P = (Position)malloc(sizeof(struct LNode));
    flag = Insert(L, X, P);
    if (flag == true) printf("Wrong Answer\n");
    flag = Del(L, X);
  if (flag == true) printf("Wrong Answer\n");
  for (P = L->Next; P; P = P->Next) printf("%d ", P->Data);
    return 0;
}
List MakeEmpty(){
    List L;
    L = (List)malloc(sizeof(struct LNode));
    L->Next = NULL;
    return L;

}
Position Find(List L, ElementType X){
    Position p = NULL;//
    if (L == NULL)
        return ERROR;
    while (L != NULL){
        if (L->Data == X){
            p = L;
           // return p;//
        }
        else//这里应该加个else
        L = L->Next;
    }
    if(NULL == p)
    {
        printf("元素不存在!\n");
        return ERROR;//如果找完整个链表都找不到,返回eorro
    }
    else
        return p;//否则就是找到了,返回地址

}
bool Insert(List L, ElementType X, Position P){
    List tmp = L;
    List apply = NULL;
    if (L == P){
        apply = (List)malloc(sizeof(struct LNode));
        apply->Data = X;
        apply->Next = P;
        tmp = apply;
        //return tmp;//既然函数定义为bool型,返回值就不能是List型
        return true;
    }
    while (L->Next != P && L->Next != NULL){
        L = L->Next;
        if (L->Next == NULL&&P != NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        else{
            apply = (List)malloc(sizeof(struct LNode));
            apply->Data = X;
            L->Next = apply;
            apply->Next = P;
            //return tmp;//既然函数定义为bool型,返回值就不能是List型
        return true;

        }
    }


}
bool Del(List L, ElementType X)

 {    
      /*  List tmp = L;
        if (L == NULL || P == NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        if (L = P){
            tmp = L->Next;
            free(L);
            //return tmp;//既然函数定义为bool型,返回值就不能是List型
        return true;
        }
        while (L->Next != P&&L->Next != NULL)
            L = L->Next;
        if (L->Next == NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        else{
            L->Next = P->Next;
            free(P);
            //return tmp;//既然函数定义为bool型,返回值就不能是List型
        return true;
        }*/
        
    Position p = NULL;//
    Position q = NULL;
    if (L == NULL)
        return false;
    while (L->Next != NULL){
        if (L->Next->Data == X){
            p = L->Next;
           // return p;//
        }
        else//这里应该加个else
        L = L->Next;
    }
    if(NULL == p)
    {
        printf("元素不存在!\n");
        return false;//如果找完整个链表都找不到,返回eorro
    }
    else//    return p;//否则就是找到了,返回地址
    {
        q = L;
        L->Next = p->Next;
        free(p);
        return true;
    }


}

我只想提醒楼主,一个没有注释的代码是很难让人看懂得,你如果以后还想让人帮你找错,记得写好注释,这也是程序员最基本的素质要求,不然没人愿意读你的程序
2016-11-05 00:04
快速回复:不懂,这个代码哪里错了,怎么改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037820 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved