鱼C论坛

 找回密码
 立即注册
查看: 2420|回复: 5

链表问题。本来想丰衣足食的,哎 。。。。

[复制链接]
发表于 2013-12-15 17:12:51 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct string
{
        char ch;
        struct string *nextptr;
};

int num = 0;

struct string *creat(struct string *h) {
        struct string *p1, *p2;
        p1 = p2 = (struct string*)malloc (sizeof (struct string));

        if (p2 != NULL) {
                scanf("%c", &p2->ch);
                p2->nextptr= NULL;
        }
        while (p2->ch != '\n') {
                num++;
                if (h == NULL) {
                        h = p2;
                }
                else
                        p1->nextptr = p2;
                p1 = p2;

                p2 = (struct string*)malloc (sizeof (struct string));

                if (p2 != NULL) {
                        scanf("%c", &p2->ch);
                                p2->nextptr=NULL;
                }
        }
        return h;
}

struct string *del(struct string *h, char *str) {
        struct string *p1, *p2;
        p1 = h;
        if(p1 == NULL) {
                printf("the list is null \n");
                return h;
        }
        p2=p1->nextptr;
        if(!strcmp(p1->ch, str)) {
                h=p2;
                return h;
        }

        while(p2!=NULL) {
                if (!strcmp(p2->ch, str)) {
                        p1->nextptr=p2->nextptr;
                        return h;
                }
                else
                {
                        p1 = p2;
                        p2 = p2->nextptr;
                }
        }
        return h;
}

void print(struct string *h) {
        struct string *temp;
        temp = h;
        while (temp != NULL) {
                printf("%c", temp->ch);
                temp = temp->nextptr;
        }
}

void main() {
        struct string *head;
        char *a;
        head = NULL;
        printf("请输入一行字符: \n");
        head = creat(head);
        print(head);
        printf("%d", num);
        printf("please enter del: \n");
        scanf("%c", &a);
        del(head, a);
        print(head);
        printf("%d", num);
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-15 19:22:09 | 显示全部楼层
主函数中指针变量a没有赋值,指向了不确定的内存单元,因此程序执行到后面报错了,scanf("%c", &a);这条语句不需要取址运算符。还有,在del函数中,判断一个字符是否相等,用了字符串的判断函数strcmp,这样的后果就是程序无法找到和输入字符拥有一样的值的结点,两个if语句分别改为if(p1->ch==*str)和if(p2->ch==*str)就行了,还有num变量用于统计链表中结点的数量,当del函数执行时,如果成功删除,应该需要减1吧,否则就没意义了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-15 20:38:17 | 显示全部楼层

先谢谢了  哥们 我先看看哦!
万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-23 10:08:36 | 显示全部楼层
ryan0632 发表于 2013-12-22 20:04
支持一下楼主

版主  你出个主意吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-23 12:42:01 | 显示全部楼层
ryan0632 发表于 2013-12-23 10:18
我只学过一点VB,派森和汇编,C方面完全不懂,你是我老师级的

好吧 您谦虚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-28 10:25:35 | 显示全部楼层
感谢楼主无私奉献!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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