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

这个怎么显示后面不显示出来

童国顺 发布于 2011-03-19 16:17, 408 次点击
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LinkList;
extern void InitList(LinkList *&L);
extern void DestroyList(LinkList *&L);
extern void DestroyList(LinkList *&L);
extern int ListEmpty(LinkList *L);
extern int ListLength(LinkList *L);
extern void DispList(LinkList * L);
extern int GetElem(LinkList *L,int i,ElemType &e);
extern int ListInsert(LinkList *&L,int i,ElemType e);
extern int ListDelete(LinkList *&L,int i,ElemType &e);
//*************************************
void InitList(LinkList *&L)
{
    L=(LinkList *)malloc(sizeof(LinkList));
    L->next=NULL;
}
//**************
void DestroyList(LinkList *&L)
{
    LinkList *p=L,*q=p->next;
    while(q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);
}
//********************
int ListEmpty(LinkList *L)
{
    return(L->next==NULL);
}
//****************
int ListLength(LinkList *L)
{
    LinkList *p=L;int i=0;
    while(p->next!=NULL)
    {
        i++;
        p->next;
    }
    return(i);
}
//*******************
void DispList(LinkList * L)
{
    LinkList *p=L->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}
//***************
int GetElem(LinkList *L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L;
    while(j<i&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL)
        return 0;
    else
    {
        e=p->data;
        return 1;
    }
}
//************************
int LocateElem(LinkList *L,ElemType e)
{
    LinkList *p=L->next;
    int n=1;
    while(p!=NULL&&p->data!=e)
    {
        p=p->next;
        n++;
    }
    if(p==NULL)
        return (0);
    else
        return (n);
}
//***********************
int ListInsert(LinkList *&L,int i,ElemType e)
{
    int j=0;
    LinkList *p=L,*s;
    while(j<i-1&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL)
        return 0;
    else
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return 1;
    }
}
//*************************
int ListDelete(LinkList *&L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L,*q;
    while(j<i-1&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL)
        return 0;
    else
    {
        q=p->next;
        if(q==NULL) return 0;
        e=q->data;
        p->next=q->next;
        free(q);
        return 1;
    }
}
//****************************
void main()
{
    LinkList *h;
    ElemType e;
    printf("1.初始化单链表h\n");
    InitList(h);
    printf("2.依次采用尾插法插入a,b,c,d,e元素\n");
    ListInsert(h,1,'a');
    ListInsert(h,2,'b');
    ListInsert(h,3,'c');
    ListInsert(h,4,'d');
    ListInsert(h,5,'e');
    printf("3.输出单链表h:");
    DispList(h);
    printf("4.单链表h长度=%d\n",ListLength(h));
    printf("5.单链表h为%s\n",(ListEmpty(h)?"空":"非空"));
    GetElem(h,3,e);
    printf("6.单链表h的第三个元素=%c\n",e);
    printf("7.元素a的位置=%d\n",LocateElem(h,'a'));
    printf("8.在第4个元素位置上插入f元素\n");
    ListInsert(h,4,'f');
    printf("9.输出单链表h:\n");
    DispList(h);
    printf("10.删除h的第三个元素\n");
    ListDelete(h,3,e);
    printf("11..输出单链表h:\n");
    DispList(h);
    printf("12.释放单链表h\n");
    DestroyList(h);
}
显示结过只显示到 3.  后面4-12都不显示
2 回复
#2
寒风中的细雨2011-03-21 08:28
int ListLength(LinkList *L)
{
    LinkList *p=L;int i=0;
    while(p->next!=NULL)
    {
        i++;
        p = p->next;
    }
    return(i);
}
#3
变幻小子2011-03-22 22:54
路过  学习
1