注册 登录
编程论坛 数据结构与算法

数据结构单链表问题

cl875821804 发布于 2012-11-24 12:05, 721 次点击
我写的程序编译能通过,但是结果不对,求大神指教
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>



typedef struct LNode
{
    char data;
    struct LNode *next;
}LNode,*Linklist;

Linklist creatlist()
{
    Linklist head,p;
    char ch;
    head=(Linklist)malloc(sizeof(LNode));
    head->next=NULL;
    scanf("%c",&ch);
    while(ch!='\n')
    {
        p=(Linklist)malloc(sizeof(LNode));
        p->data=ch;
        p->next=head->next;
        head->next=p;
        scanf("%c",&ch);
    }
    return head;
}
Linklist findlist(Linklist head,int k)
{
    Linklist p=head;
    int m=0;
    while(p!=NULL&&m<k)
    {
        p=p->next;
        m++;
    }
    return p;
}

int length(Linklist head)
{
    int j=0;
    Linklist p;
    p=head->next;
    while(p!=NULL)
    {
        p=p->next;
        j++;
    }
    return (j);
}
void insertlist(Linklist head,int i,char x)
{
    Linklist p,q;
    if(i<0||i>length(head))
        printf("Error!!");
    else
        {
            p=findlist(head,i-1);
            q=(Linklist)malloc(sizeof(LNode));
            q->data=x;
            q->next=p->next;
            p->next=q;
        }
}
void deletelist(Linklist head,int i)
{
    Linklist p=head->next,q;
    if(i<1||i>length(head))
        printf("Error!!");

        p=findlist(head,i-1);
        q=p->next;
        p->next=q->next;
        free(q);

}
void printlist(Linklist head)
{
    Linklist p=head->next;
    printf("\nhead-->");
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("-->end");
}
void main()
{
    int l;
    Linklist h,p;
    h=creatlist();
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
    insertlist(h,5,'c');
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
    p=findlist(h,5);
    printf("找到的元素为:%d\n",p->data);
    deletelist(h,4);
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
}
11 回复
#2
寒风中的细雨2012-11-24 12:36
回复 楼主 cl875821804
什么结果不对?

把不对的操作产生过程 贴出来......
#3
凌云飞翔2012-11-24 12:53
首先楼主输入abcdefg时  ,必定显示的是gfedcba , 由链表的结构所致
另外printf("找到的元素为:%d\n",p->data);此处将%d 改为 %c
 
#4
cl8758218042012-11-24 15:06
a b d e f g

head-->g f e d b a-->end链表的长度为:11

head-->g f ce d b a-->end链表的长度为:12
找到的元素为:c

head-->g fce d b a-->end链表的长度为:11
Press any key to continue
#5
cl8758218042012-11-24 15:06
已经改成%c,还是不行
#6
萨尔甘2012-11-24 15:33
return (j); 可以这样用吗?
#7
lxq69668922012-11-24 15:58
可以这样用
#8
lxq69668922012-11-24 16:03
应该是输入的时候空格也算是一个字符吧?
#9
凌云飞翔2012-11-24 17:08
楼上正解,输入时不要空格,直接输入 例如:abcdefghjk
#10
凌云飞翔2012-11-24 17:24
回复 楼主 cl875821804
只有本站会员才能查看附件,请 登录
#11
cl8758218042012-11-24 18:16
额,原来如此。。。。。。。。。。。。拜谢。。。。
#12
cl8758218042012-11-24 18:24
程序把空格当成字符了,大家以后注意啊!!!!!!!!!!
1