问一个自定义链表的问题,马上给分◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎

popyyb 2003-08-25 02:46:52
我自己写了一个简单的链表,但是为什么总不能把在main中生成的node插入到链表中,这是为什么,请看:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<string.h>

struct PCB
{
char name[30];
int number;
};

struct Node
{
PCB* plink;
Node* next;
};

Node* create(Node *head)
{
head->next=NULL;
head->plink=NULL;
return (head);
}

Node* createNewNode()
{
Node * newNode;
newNode=(Node *)malloc(sizeof(Node));
newNode->plink=(PCB *)malloc(sizeof(PCB));
char tempname[30]={'t','e','m','p','n','o','d','e'};
strcpy(newNode->plink->name,tempname);
//newNode->plink->name='aa';
newNode->plink->number=2;
newNode->next=NULL;
return newNode;
}

void AddNodes(Node *head, int n)
{
Node *p,*q;
q=head;
for (int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->plink=(PCB *)malloc(sizeof(PCB));
cout<<"Set name and number"<<endl;
cin>>p->plink->name>>p->plink->number;
q->next=p;
q=p;
}/*endfor*/
p->next=NULL;

}

Node* create(Node *head,int n)
{
int i;
Node *p,*q;
if (n==0)
{
head->next=NULL;
head->plink=NULL;
return (head);
}/*endif*/
q=head;
for (i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->plink=(PCB *)malloc(sizeof(PCB));
cout<<"Set name and number"<<endl;
cin>>p->plink->name>>p->plink->number;
q->next=p;
q=p;
}/*endfor*/
p->next=NULL;
return(head);
}

void AddNodeToList(Node *head, Node *newNode)
{
Node *p;
p=head->next;


while(p != NULL)
{
p=p->next;
}
p=newNode;
p->next=NULL;
}

int getSize(Node *head)
{
Node * p = head->next;
int i = 0;
while(p != NULL)
{
i++;
p=p->next;
}
return i;
}

void print(Node *head)
{
Node *p = head->next;

if (p == NULL)
{
return;
}
while(p!= NULL)
{
cout<<p->plink->name<<" "<<p->plink->number<<endl;
p=p->next;
}
}

void main()
{
Node* a;
a=(Node *)malloc(sizeof(Node));
create(a);
int size = getSize(a);
cout<<"size= "<<size<<endl;
Node *temp;
//temp=(Node *)malloc(sizeof(Node));
temp=createNewNode();
AddNodeToList(a,temp);
size = getSize(a);
cout<<"size= "<<size<<endl;
print(a);
}
两个输出都是0,不知道为什么,请指教!
...全文
26 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jnqx 2003-08-26
  • 打赏
  • 举报
回复
我注意了一下,你的头指针好像一直为空,建议尽量把头指针定义为全局变量,这样好控制。
还有,尽量让函数返回头指针。

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<string.h>

struct PCB
{
char name[30];
int number;
};

struct Node
{
PCB* plink;
Node* next;
};
struct Node *head;

//Node* create(void)
//{
// head->next=NULL;
// head->plink=NULL;
// return (head);
//}

Node* createNewNode()
{
Node * newNode;
newNode=(Node *)malloc(sizeof(Node));
newNode->plink=(PCB *)malloc(sizeof(PCB));
char tempname[30]={'t','e','m','p','n','o','d','e'};
strcpy(newNode->plink->name,tempname);
//newNode->plink->name='aa';
newNode->plink->number=2;
newNode->next=NULL;
return newNode;
}

struct Node* AddNodes( int n)
{
Node *p,*q;
q=head;
for (int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->plink=(PCB *)malloc(sizeof(PCB));
cout<<"Set name and number"<<endl;
cin>>p->plink->name>>p->plink->number;
q->next=p;
q=p;
}/*endfor*/
p->next=NULL;
return head;

}

Node* create(int n)
{
int i;
Node *p,*q;
if (n==0)
{
head->next=NULL;
head->plink=NULL;
return (head);
}/*endif*/
q=head;
for (i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->plink=(PCB *)malloc(sizeof(PCB));
cout<<"Set name and number"<<endl;
cin>>p->plink->name>>p->plink->number;
q->next=p;
q=p;
}/*endfor*/
p->next=NULL;
return(head);
}

struct Node* AddNodeToList( Node *newNode)
{
Node *p;

p=head;
if(head == NULL)
{
head = newNode;
head->next = NULL;
}

while(p!= NULL)
{
p=p->next;
}
p=newNode;

p->next=NULL;
return head;
}

int getSize()
{
Node * p = head;
int i = 0;
while(p != NULL)
{
i++;
p=p->next;
}
return i;
}

void print()
{
Node *p = head;

if (p == NULL)
{
return;
}
while(p!= NULL)
{
cout<<p->plink->name<<" "<<p->plink->number<<endl;
p=p->next;
}
}

void main()
{
//Node* a;
head=NULL;
//a=(Node *)malloc(sizeof(Node));
//create(a);
int size = getSize();
cout<<"size= "<<size<<endl;
Node *temp;
//temp=(Node *)malloc(sizeof(Node));
temp=createNewNode();
head=AddNodeToList(temp);
size = getSize();
cout<<"size= "<<size<<endl;
print();
}
minghui000 2003-08-26
  • 打赏
  • 举报
回复
关注
popyyb 2003-08-25
  • 打赏
  • 举报
回复
改成这样也不行,不明白
Node* createNewNode(Node *head)
{
Node *p,*q;
p=head->next;
Node * newNode;
newNode=(Node *)malloc(sizeof(Node));
newNode->plink=(PCB *)malloc(sizeof(PCB));
char tempname[30]={'t','e','m','p','n','o','d','e'};
strcpy(newNode->plink->name,tempname);
newNode->plink->number=2;
newNode->next=NULL;
while(p != NULL)
p=p->next;
p=newNode;
return head;
}
popyyb 2003-08-25
  • 打赏
  • 举报
回复
写错了,应为:Node* createNewNode(Node *head)
popyyb 2003-08-25
  • 打赏
  • 举报
回复
我改了这个函数
Node* createNewNode(Node *p)
{
Node *p, *q;
q=head;
p=q->next;

Node *newNode;
newNode=(Node *)malloc(sizeof(Node));
newNode->plink=(PCB *)malloc(sizeof(PCB));
char tempname[30]={'t','e','m','p','n','o','d','e'};
strcpy(newNode->plink->name,tempname);
newNode->plink->number=2;
newNode->next=NULL;

while (p != NULL)
{
p=p->next;
}
p=newNode;
return q;
}

似乎还有问题啊,调用的时候传入头结点
bm1408 2003-08-25
  • 打赏
  • 举报
回复
作用范围不对!
正如楼上上所说,即然是创建结点当然就是要返回头指针了!
而你返回了却是一个局部变量!
另外这里:
Node* a;
a=(Node *)malloc(sizeof(Node));
a->next=NULL;
a->link=NULL;
这个CREATE函数有无皆可!
Node* createNewNode(NODE *p)
{
Node * newNode;
newNode=(Node *)malloc(sizeof(Node));
newNode->plink=(PCB *)malloc(sizeof(PCB));
char tempname[30]={'t','e','m','p','n','o','d','e'};
strcpy(newNode->plink->name,tempname);
//newNode->plink->name='aa';
newNode->plink->number=2;
newNode->next=NULL;
p->link=newNode;
p-next=newNode;
return p;
}


popyyb 2003-08-25
  • 打赏
  • 举报
回复
哪位帮忙
luxinder 2003-08-25
  • 打赏
  • 举报
回复
我认为是你的createNewNode()有问题,你返回了个指向局部变量的指针,
而该指针在调用结束后就消失了,因此没赋值给第一个节点。
thrillers 2003-08-25
  • 打赏
  • 举报
回复
帮你up

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧