| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 398 人关注过本帖
标题:一个简单的问题,但就是不懂,求解?
只看楼主 加入收藏
pgyan
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-11-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
一个简单的问题,但就是不懂,求解?
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef int DataType;
typedef  struct  node
{  
    DataType data;            /*每个元素数据信息*/
    struct node *next;        /*存放后继元素的地址*/
} LNode, *LinkList;

LinkList Creat_LinkList(void )
{                              /*创建空单链表,入口参数:无;返回值:单链表的头指针,0代表创建失败,非0表成功*/
    LinkList H;
    H = (LinkList)malloc(sizeof(LNode));
    if (H)                      /*确认创建头结点创建是否成功,若成功,修改单链表头结点的指针域为0表空表*/
        H->next=NULL;
    return H;
}


void Destroy_LinkList(LinkList H)
{                                /*销毁单链表,入口参数:单链表头指针的地址,出口参数:无*/
    LinkList p,q;
    p=H;
    while (p)                     /*释放单链表的所有结点*/
    {   
        q=p;
        p = p->next;
        free(q);
    }                             /*while */
    H=NULL;                         /*将头指针变为零表示单链表不存在*/
}


int  Length_LinkList (LinkList H)
{                                     /* 求单链表表长,入口参数:单链表头指针,出口参数:表长,-1表示单链表不存在。*/
    LinkList  p=H;                     /* p指向头结点*/
    int  count= -1;                     /*H带头结点所以从-1开始*/
    while ( p)                         /* p所指的是第 count + 1 个结点*/
    {   
        count++;               
        p=p->next;
    }                                  /*while */
    return (count);
}


LinkList  Locate_LinkList( LinkList  H, int  i)
{   
    LinkList p;
    int j;
    p=H;  
    j=0;
    while (i>=j+1 && p!=NULL)     /*查找第i个结点*/
    {     
        p=p->next;
        j++;
    }                                /*while*/
   
    if (!p || j>i )
    {   
        printf("参数 i 错或单链表不存在");
        return (NULL);   
    }                              /*第i个结点不存在*/
    return (p);
}



int Insert_LinkList( LinkList H, int i,  DataType x)
{
    LinkList   p, q;
    p= Locate_LinkList(H, i-1);        /*找第i-1个结点地址*/
    if (!p)
    {  
        printf("i有误");
        return (0);
    }
    q=(LinkList) malloc(sizeof(LNode));
    if (!q)
    {
        printf("申请空间失败");
        return (0);
    }                                    /*申请空间失败,不能插入*/
   
    q->data = x;
    q->next = p->next;      ////////////
    p->next = q;
   
    return 1;                        /*插入成功,则返回*/
}


int  Del_LinkList(LinkList  H, int i)
{                                        /*删除单链表H上的第i个结点;返回参数:0不成功,1成功*/
    LinkList p, q;
    //int j;
    if  (!H->next)
    {
        printf("空表不能删除");
        return (0);   
    }
    p= Locate_LinkList( H, i-1);  
    if (!p)
    {   
        printf("参数 i 错");
        return (0);                        /*第i个结点不存在不能删除*/
    }
   
    q = p->next;
    p->next = q->next;
    free(q);
    return (1);
   
}

int Print_LinkList(LinkList H)
{
    LinkList p;
    p = H->next;                    ////////////////////////////////////////////修改的地方
    while(p != NULL)
    {   
        
        printf("%d  ",p->data);   /////////////////////////////////////////修改的地方
        p = p->next;             //////////////////////////////////////////修改的地方
   
    }
    printf("\n");   
    return 1;   
}

void InvertList( LinkList L )            // 单链表逆置
{
    LinkList  p , q , r ;
    p = L->next;
    L->next = NULL;
    while ( p ){
        q=p->next;
        p->next=L->next;
        L->next =p;
        p=q;
    }
}


void main()
{
    int n,i,x,length;
    LinkList L;
    LinkList t;
   
    L=Creat_LinkList();
   
    printf("请输入要插入的元素的个数:");     //(向单链表中插入n个元素)
    scanf("%d",&n);
   
    for(i=1;i<=n;i++)
    {
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&x);
        Insert_LinkList( L, i, x);              
    }
    Print_LinkList(L);                       //(输出单链表中的元素)
   
    printf("请输入要删除的元素的位置:");    //(删除单链表中i个元素)
    scanf("%d",&i);
    Del_LinkList(L, i);
   
    Print_LinkList(L);                       //(输出单链表中的元素)
   
    printf("请输入要查找的元素的位置:");
    scanf("%d",&i);
    t = Locate_LinkList( L,i);
    printf("%d\n",t->data);               //(查找单链表中的第i个元素)
   
    printf("链表长度为:");
    length = Length_LinkList (L);
    printf("%d\n",length);                //(输出单链表中的长度)
   
    InvertList(L );
    Print_LinkList(L);                    //(将单链表逆置,并输出逆置后单链表中的元素)
   
    Destroy_LinkList(L);                //(销毁单链表)
}
这是一个调试没有错误的代码,但是好多东西不懂,求解答!
1:为什么在长度结构体中count=-1而不是等于0?
2:在查找结构体中,j=0而不是等于0?
3:如果不要修改的结构体就出错呢?



搜索更多相关主题的帖子: 成功 include 元素 
2012-05-25 20:28
pgyan
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-11-1
收藏
得分:0 
我想问的是在查找结构体中j为什么不等于1?
2012-05-25 20:30
榴紫丫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:33
专家分:135
注 册:2011-11-3
收藏
得分:7 
程序代码:
LinkList  p=H;                     /* p指向头结点*/
     int  count= -1;                     /*H带头结点所以从-1开始*/

带头结点,其有元素,也就是说0,1,2,....,0 的位置有元素,故不能从1LinkList p;
    int j;
    p=H;
     j=0;

 这是对j 赋初值
j==0是判断j与0相等
2012-05-26 00:35
快速回复:一个简单的问题,但就是不懂,求解?
数据加载中...
 
   



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

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