杨学子 发表于 2013-12-15 17:12:51

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

#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);
}

北林之中 发表于 2013-12-15 19:22:09

主函数中指针变量a没有赋值,指向了不确定的内存单元,因此程序执行到后面报错了,scanf("%c", &a);这条语句不需要取址运算符。还有,在del函数中,判断一个字符是否相等,用了字符串的判断函数strcmp,这样的后果就是程序无法找到和输入字符拥有一样的值的结点,两个if语句分别改为if(p1->ch==*str)和if(p2->ch==*str)就行了,还有num变量用于统计链表中结点的数量,当del函数执行时,如果成功删除,应该需要减1吧,否则就没意义了。

杨学子 发表于 2013-12-15 20:38:17

北林之中 发表于 2013-12-15 19:22 static/image/common/back.gif
主函数中指针变量a没有赋值,指向了不确定的内存单元,因此程序执行到后面报错了,scanf("%c", &a);这条语句 ...

先谢谢了哥们 我先看看哦!
万分感谢!

杨学子 发表于 2013-12-23 10:08:36

ryan0632 发表于 2013-12-22 20:04 static/image/common/back.gif
支持一下楼主

版主你出个主意吧

杨学子 发表于 2013-12-23 12:42:01

ryan0632 发表于 2013-12-23 10:18 static/image/common/back.gif
我只学过一点VB,派森和汇编,C方面完全不懂,你是我老师级的

好吧 您谦虚了

arise 发表于 2013-12-28 10:25:35

感谢楼主无私奉献!
页: [1]
查看完整版本: 链表问题。本来想丰衣足食的,哎 。。。。