| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:不懂,麻烦讲解一下?
只看楼主 加入收藏
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
结帖率:38.67%
收藏
已结贴  问题点数:10 回复次数:8 
不懂,麻烦讲解一下?

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define     OK      1
#define     NULL   0
#define     OVERFLOW     -2
typedef     int     ElemType;   
typedef     int Status;
#define     LIST_INIT_SIZE   100
#define     LISTINCREMENT     10
typedef struct node
{
     int data;
     struct node *next;
}Linklist;

Status Initilist()
{
    Linklist *head;
    if(head=(Linklist *)malloc(sizeof(node)==NULL))
    {
        return 0;
    }
    head->next=NULL;
    return OK;
}

Linklist * createlist(int n)
{
    int k;
    Linklist *head,*r,*p;

    p=(Linklist *)malloc(sizeof(Linklist));
    p->next=NULL;
    head=p;

    for(k=1;k<=n;k++)
    {
        
        r=(Linklist *)malloc(sizeof(Linklist));
        printf("input value:\n");
        scanf("%d",&(r->data));
        r->next=NULL;      
        p->next=r;
        p=r;
        
    }
    return (head);
}


void Printlist(Linklist *head)
{
    Linklist *p;
    p=head->next;
   
    while(p!=NULL)
    {
        printf("%4d",p->data);
        p=p->next;
    }
    printf("\n");
}
Linklist *find(Linklist *head,int i)
{
    int j;
    Linklist *p;
    p=head->next;
    j=1;
    while(p!=NULL&&j<i)
    {
        p=p->next;
        j++;
    }
    printf("\n");
    return p;
}

void insert(Linklist *head,int i,int k)
{
    Linklist *p;
    Linklist *s;
   
    int j=0;
    p=head;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
            
    s=(Linklist *)malloc(sizeof(Linklist));
    s->data=k;
    s->next=p->next;
    p->next=s;
   
}


int main(int argc, char* argv[])
{
    Linklist *L;
    Linklist *q;
    int x;
    int k;
    int select;
    int i=0;
    Initilist();
    L=createlist(5);//这个L指针如何存放数据的,又是如何输出的?
    Printlist(L);
    printf("input i:\n");
    scanf("%d",&i);
    printf("input k:\n");
    scanf("%d",&k);
    insert(L,x,k);
    Printlist(L);
    printf("input i:\n");
    scanf("%d",&i);
    q=find(L,i);
    printf("%d",*q);
    return 0;
}
搜索更多相关主题的帖子: 讲解 麻烦 
2009-09-28 16:05
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:3 
程序代码:
#include "stdafx.h" 
#include "stdio.h" 
#include "stdlib.h" 
#define     OK      1 
#define     NULL   0           //这里重定义了
#define     OVERFLOW     -2 
typedef     int     ElemType;     //自定义一个类型ElemType为INT类型
typedef     int Status;            //自定义一个Status类型为INT类型
#define     LIST_INIT_SIZE   100 
#define     LISTINCREMENT     10 
typedef struct node 
{ 
     int data; 
     struct node *next; 
}Linklist;                        //定义一个节点结构体
 
Status Initilist()                 //初始化函数
{ 
    Linklist *head; 
    if(head=(Linklist *)malloc(sizeof(node)==NULL))    //给head分配内存空间
    { 
        return 0; 
    } 
    head->next=NULL; 
    return OK; 
} 
 
Linklist * createlist(int n)          //创建链表
{ 
    int k; 
    Linklist *head,*r,*p; 
 
    p=(Linklist *)malloc(sizeof(Linklist));     //给P分配空间
    p->next=NULL; 
    head=p;                                      //head=p
 
    for(k=1;k<=n;k++)                            //利用r往p插入数据
    { 
         
        r=(Linklist *)malloc(sizeof(Linklist)); 
        printf("input value:\n"); 
        scanf("%d",&(r->data)); 
        r->next=NULL;       
        p->next=r; 
        p=r; 
         
    } 
    return (head);                             //返回head,这时head应该等于p构建成的链表
} 
 
 
void Printlist(Linklist *head)                  //打印链表
{ 
    Linklist *p; 
    p=head->next;                                   
     
    while(p!=NULL)                     
    { 
        printf("%4d",p->data); 
        p=p->next; 
    } 
    printf("\n"); 
} 
Linklist *find(Linklist *head,int i)         //查询链表
{ 
    int j; 
    Linklist *p; 
    p=head->next; 
    j=1; 
    while(p!=NULL&&j<i) 
    { 
        p=p->next; 
        j++; 
    } 
    printf("\n"); 
    return p; 
} 
 
void insert(Linklist *head,int i,int k)      //插入数据
{ 
    Linklist *p; 
    Linklist *s; 
     
    int j=0; 
    p=head; 
    while(p&&j<i-1)              //定位
    { 
        p=p->next; 
        ++j; 
    } 
             
    s=(Linklist *)malloc(sizeof(Linklist)); //数据插入
    s->data=k; 
    s->next=p->next; 
    p->next=s; 
     
} 
 
 
int main(int argc, char* argv[]) 
{ 
    Linklist *L; 
    Linklist *q; 
    int x; 
    int k; 
    int select; 
    int i=0; 
    Initilist(); 
    L=createlist(5);//这个L指针如何存放数据的,又是如何输出的?   //调用了createlist函数创建L
    Printlist(L);                                                  //这里调用了Printlist函数输出
    printf("input i:\n"); 
    scanf("%d",&i); 
    printf("input k:\n"); 
    scanf("%d",&k); 
    insert(L,x,k);                   //调用insert函数往L的x位置插入数据K
    Printlist(L); 
    printf("input i:\n"); 
    scanf("%d",&i); 
    q=find(L,i);                     //查询L的i位置
    printf("%d",*q); 
    return 0; 
}
2009-09-28 16:26
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
收藏
得分:0 
L=createlist(5);   //这里是调用了createlist函数创建L的头指针吗?还是创建了新的线性表L?
2009-09-28 16:40
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:0 
注意这里,createlist函数是一个返回Linklist*的函数,createlist(5)就是把5传到函数,构建了5个节点的链表,然后L等于返回后的链表,这样L就为一个有着5个节点并且自己赋值的函数了
2009-09-28 16:53
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:3 
看一下createlist的定义就可以明白了,Linklist * createlist(int n)创建长度为n的链表

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-09-28 16:53
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
收藏
得分:0 
但返回的是一个head指针啊,我还是想不通
2009-09-28 16:59
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:0 
返回的是head指针没错,因为通过这个头指针就可以找到整个链表的所有结点。你可以看一下函数定义中是调用了n次malloc函数,创建了n个结点,也就是说建立了整个链表。只是最后的返回值是头指针而已。

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-09-28 17:04
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:0 
楼上正解
2009-09-28 17:12
刘暮哲
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:75
专家分:83
注 册:2009-9-25
收藏
得分:3 
指针博大精深  我们还要加油啊  不过2楼解释的很好

做最好的自己
2009-09-28 19:54
快速回复:不懂,麻烦讲解一下?
数据加载中...
 
   



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

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