| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 377 人关注过本帖
标题:指针问题,不懂?
只看楼主 加入收藏
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
结帖率:38.67%
收藏
已结贴  问题点数:20 回复次数:6 
指针问题,不懂?
#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;这个p为什么指向链表的第二个节点?
    while(p!=NULL)//当p指向第二个节点放到while循环好像不对啊?
    {
        printf("%4d",p->data);
        p=p->next;
    }
    printf("\n");
}

Linklist *find(Linklist *head,int i)
{
    int j;
    Linklist *p;
    p=head->next;//这个p为什么指向链表的第二个节点?
    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;
    Linklist *head;
    int x;
    int k;
    int select;
    int i=0;
    Initilist();
    L=createlist(5);
    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-10-11 12:08
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
收藏
得分:0 
我改了一下程序,但是还有些错误?那个查找的功能还不能实现?
#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;
 
 
Linklist * createlist(int n)
{
    int k;
    Linklist *head,*r,*p;
 
    head=p=(Linklist *)malloc(sizeof(Linklist));     
    p->next=NULL;
    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");
}
 
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;
     
}
 
Linklist *find(Linklist *head,int i) //这个查找函数还不能实现查找链表的元素的下标志?代码该如何修改?
{
    int j;
    Linklist *p;
    p=head->next;
    j=1;
    while(p!=NULL&&j<i)
    {
         
        j++;
        p=p->next;
    }
    printf("\n");
    return p;
}
 
 
int main(int argc, char* argv[])
{
    Linklist *L;
    Linklist *q;
    Linklist *head;
    int x;
    int k;
    int select;
    int i=0;
   
    L=createlist(5);
    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-10-11 12:21
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:5 
void Printlist(Linklist *head)
{
    Linklist *p;
    p=head->next;这个p为什么指向链表的第二个节点?
    while(p!=NULL)//当p指向第二个节点放到while循环好像不对啊?
    {
        printf("%4d",p->data);
        p=p->next;
    }
    printf("\n");
}

没比较指向第二个节点啊,如果head为NULL,这个代码是否有问题?


要练习算法就来http:///!!有挑战哦!!
2009-10-11 12:21
henji
Rank: 1
等 级:新手上路
帖 子:227
专家分:0
注 册:2009-4-19
收藏
得分:0 
恩,是有问题,我改了一下的
#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;
 
 
Linklist * createlist(int n)
{
    int k;
    Linklist *head,*r,*p;
 
    head=p=(Linklist *)malloc(sizeof(Linklist));     
    p->next=NULL;
    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");
}
 
void insert(Linklist *head,int i,int k) //这个插入也有不能够完全实现插入功能
{
    Linklist *p;
    Linklist *s;
     
    int j=0;
    p=head->next;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }            
    s=(Linklist *)malloc(sizeof(Linklist));
    s->data=k;
    s->next=p->next;
    p->next=s;
     
}
 
Linklist *find(Linklist *head,int i) //但在这个查找功能里面还是不能够实现查找的
{
    int j;
    Linklist *p;
    p=head->next;
    j=1;
    while(p!=NULL&&j<i)
    {
         
        j++;
        p=p->next;
    }
    printf("\n");
    return p;
}
 
 
int main(int argc, char* argv[])
{
    Linklist *L;
    Linklist *q;
    Linklist *head;
    int x;
    int k;
    int select;
    int i=0;
   
    L=createlist(5);
    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-10-11 12:32
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:5 
int main(int argc, char* argv[])  
{  
    Linklist *L;  
    Linklist *q;  
    //Linklist *head;  
    int x;  
    int k;  
    //int select;  
    int i=0;  
     
    L=createlist(5);  
    Printlist(L);  
    printf("input x:\n");  
    scanf("%d",&x);
  
    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->data);  
    return 0;  
}  

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-10-11 15:10
hotbloodboy
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2009-10-11
收藏
得分:5 
好复杂啊

http://shop34118035.专业批发上网本qq:1019515620
2009-10-11 15:21
zjhiphop
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2009-10-11 15:51
快速回复:指针问题,不懂?
数据加载中...
 
   



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

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