| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 458 人关注过本帖
标题:单循环链表问题,帮忙看一下,可以说一下调试过程更好
只看楼主 加入收藏
灵魂活着
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-1
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:3 
单循环链表问题,帮忙看一下,可以说一下调试过程更好
#include<stdio.h>
#include<stdlib.h>
typedef int ElemTyp;
typedef struct Lnode
{
    ElemTyp data;
    struct Lnode *next;
}Lnode;
typedef Lnode * List;
List InitList()
{//初始化链表
    List L;
    L=(List)malloc(sizeof(Lnode));
    if(!L)
        exit(-1);
    L->next=L;
    return L;
}
void ClearList(List L)
{//清空链表
    List q,p;
    L=L->next;
    p=L->next;
    while(p!=L)
    {
        q=p->next;
        free(p);
        p=q;
    }
    L->next=L;
}
bool EmptyList(List L)
{//判断链表是否为空
    if(L==L->next)
        return true;
    else
        return false;
}
int ListLength(List L)
{//计算链表的长度
    int i=0;
    List q;
    q=L->next;
    while(q!=L)
    {
        ++i;
        q=q->next;
    }
    return i;
}
bool InsertElemTyp(List L,int i,ElemTyp e)
{//插入节点,在第i个元素前;
    List q,s;
    int j;
    if(i<=0||i>ListLength(L)+1)
        return false;
  //  if(i==ListLength(*L)+1)
    q=L->next;
    for(j=0;j<i-1;j++)
        q=q->next;
    s=(List)malloc(sizeof(Lnode));
    s->data=e;
    s->next=q->next;
    q->next=s;
    if(q==L)
        L=s;
    return true;
}
bool DeleteElemTyp(List L,int i,ElemTyp *e)
{//删除第i个节点,并用e返回
    List q,p;
    int j;
    if(i<1||i>ListLength(L))
        return false;
    q=L->next;
    for(j=0;j<i-1;j++)
        q=q->next;
    p=q->next;//p为释放节点
    q->next=p->next;
    *e=p->data;   
    if(i==ListLength(L))
        L=q;
    free(p);
    return true;
}
//bool SearchElemTyp(List L,int i,ElemTyp *e)
void TraverseList(List L)
{//遍历链表
    List q;
    q=L->next;
    while(q!=L)
    {   
        q=q->next;
        printf("%d ",q->data);
    }
    printf("\n");
}
int main()
{
    ElemTyp e;
    List L;
    L=InitList();
    InsertElemTyp(L,1,10);
    InsertElemTyp(L,1,15);
/*    InsertElemTyp(L,1,14);
    InsertElemTyp(L,1,13);
    InsertElemTyp(L,1,12);*/
    TraverseList(L);
    printf("链表的长度是:%d\n",ListLength(L));
/*    DeleteElemTyp(L,5,&e);
    printf("删除的元素是:%d\n",e);
    printf("链表的长度是:%d\n",ListLength(L));*/
    return 0;
}
搜索更多相关主题的帖子: 单循环 include return 
2013-07-27 14:01
灵魂活着
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-1
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
typedef int ElemTyp;
typedef struct Lnode
{
    ElemTyp data;
    struct Lnode *next;
}Lnode;
typedef Lnode * List;
List InitList()
{//初始化链表
    List L;
    L=(List)malloc(sizeof(Lnode));
    if(!L)
        exit(-1);
    L->next=L;
    return L;
}
void ClearList(List L)
{//清空链表
    List q,p;
    L=L->next;
    p=L->next;
    while(p!=L)
    {
        q=p->next;
        free(p);
        p=q;
    }
    L->next=L;
}
bool EmptyList(List L)
{//判断链表是否为空
    if(L==L->next)
        return true;
    else
        return false;
}
int ListLength(List L)
{//计算链表的长度
    int i=0;
    List q;
    q=L->next;
    while(q!=L)
    {
        ++i;
        q=q->next;
    }
    return i;
}
bool InsertElemTyp(List *L,int i,ElemTyp e)
{//插入节点,在第i个元素前;
    List q,s;
    int j;
    if(i<=0||i>ListLength(*L)+1)
        return false;
  //  if(i==ListLength(*L)+1)
    q=(*L)->next;
    for(j=0;j<i-1;j++)
        q=q->next;
    s=(List)malloc(sizeof(Lnode));
    s->data=e;
    s->next=q->next;
    q->next=s;
    if(q==*L)
        *L=s;
    return true;
}
bool DeleteElemTyp(List *L,int i,ElemTyp *e)
{//删除第i个节点,并用e返回
    List q,p;
    int j;
    if(i<=0||i>ListLength(*L))//运行到这里就停止了,
        return false;
    q=(*L)->next;
    for(j=0;j<i-1;j++)
        q=q->next;
    p=q->next;//p为释放节点
    q->next=p->next;
    *e=p->data;   
    if(i==ListLength(*L))
        *L=q;
    free(p);
    return true;
}
//bool SearchElemTyp(List L,int i,ElemTyp *e)
void TraverseList(List L)
{//遍历链表
    List q;
    q=L->next;
    while(q!=L)
    {   
        q=q->next;
        printf("%d ",q->data);
    }
    printf("\n");
}
int main()
{
    ElemTyp e;
    List L;
    L=InitList();
    InsertElemTyp(&L,1,10);
    InsertElemTyp(&L,1,15);
    InsertElemTyp(&L,1,14);
    InsertElemTyp(&L,1,13);
    InsertElemTyp(&L,1,12);
    TraverseList(L);
    printf("链表的长度是:%d\n",ListLength(L));
    DeleteElemTyp(&L,5,&e);
    printf("删除的元素是:%d\n",e);
    printf("链表的长度是:%d\n",ListLength(L));
    return 0;
}
刚才是没有发送指针的问题,我加上去了,但是 if(i<=0||i>ListLength(*L))//运行到这里就停止了,

如果风雨过后,你还在....成功了吗
2013-07-27 15:12
灵魂活着
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-6-1
收藏
得分:0 
bool DeleteElemTyp(List *L,int i,ElemTyp *e)
{//删除第i个节点,并用e返回
    List q,p;
    int j;
    if(i<=0||i>ListLength(*L))//运行到这里就停止了,
        return false;
    q=(*L)->next;
    for(j=0;j<i-1;j++)
        q=q->next;
    p=q->next;//p为释放节点
    q->next=p->next;
    *e=p->data;   
    if(i==ListLength(*L))//找到了是这里错了,我忘记了已经删除了一个节点了,
        *L=q;
    free(p);
    return true;
}
还是自己解决,,,,细节,,,,

如果风雨过后,你还在....成功了吗
2013-07-27 15:30
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:20 

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-27 17:58
快速回复:单循环链表问题,帮忙看一下,可以说一下调试过程更好
数据加载中...
 
   



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

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