怎么创建无序链表,数据结构高手请帮忙!!!
typedefstructnode{intdata1;chardata2[10];node*next;}*ptrN;ptrNnode1,node2;ptrNcreatel...
typedef struct node
{
int data1;
char data2[10];
node*next;
}*ptrN;
ptrN node1,node2;
ptrN createlinked()//A
{
ptrN p1,p2,head;
int a;
char*ch=new char[20];
head=0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
while(1)
{
cin>>a;
if(a==-1)break;
cin>>ch;
p1=new node1;
p1->data1=a;
strcpy(p1->data2,ch);
if(head==0)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
if(head)p2->next=0;
delete ch;
return head;
}
A行中ptrN 什么作用?在ptrN createlinked()//A中,ptrN createlinked
仅仅是函数名吗?希望数据结构高手帮我分析一下创建无序链表的思想。我看了几遍,都不是很懂。 展开
{
int data1;
char data2[10];
node*next;
}*ptrN;
ptrN node1,node2;
ptrN createlinked()//A
{
ptrN p1,p2,head;
int a;
char*ch=new char[20];
head=0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
while(1)
{
cin>>a;
if(a==-1)break;
cin>>ch;
p1=new node1;
p1->data1=a;
strcpy(p1->data2,ch);
if(head==0)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
if(head)p2->next=0;
delete ch;
return head;
}
A行中ptrN 什么作用?在ptrN createlinked()//A中,ptrN createlinked
仅仅是函数名吗?希望数据结构高手帮我分析一下创建无序链表的思想。我看了几遍,都不是很懂。 展开
2个回答
展开全部
//你这个结构的算法是后插法建立的链表。我给你每句都加了注释,希望对你有所帮助。
ptrN createlinked
-----------------------
ptrN 是定义的节点的指针类型(就如同内置类型一样,是一种数据类型了。),此处作为返回值类型。(因为要创建链表,所以返回值类型当然就是节点指针类型)。
createlinked 是函数名。
typedef struct node
{
int data1;
char data2[10];
node *next;
}*ptrN;//定义一个节点指针类型。
ptrN node1,node2; //用此指针类型声明两个节点指针。
ptrN createlinked()//A
{
ptrN p1,p2,head; //声明三个节点指针。
int a;
char *ch=new char[20]; //
head=0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
while(1)
{
cin>>a;
if(a==-1)break;
cin>>ch;
p1=new node1;//申请一个节点的空间,并赋于指针p1.
p1->data1=a; //申请到内存就可以给节点的数据项赋值。
strcpy(p1->data2,ch); //这个是字符串copy,同样是写数据到节点p1.此时,数据赋值完毕。
if(head==0) //如果头节点为空。则
{ ///很明显,此链表用的是后插入法。(就是每建立一个新节点,就插到已有链表的最后面)。
head=p1; 将新建立的节点赋给头节点。
p2=p1; 并且将它保存起来,放到p2中。
}
else
{ //如果前一节点不这空,则
p2->next=p1; //将新建立的节点放到所有节点的后面。
p2=p1; //同样保存起来给下次使用。
}
}
if(head)p2->next=0;//这里就是将新插入的节点的next域写为空。构造成一个完整的链表。
delete ch;//释放在stack中申请的空间,防止泄漏。
return head; //返回链表的头节点。
}
ptrN createlinked
-----------------------
ptrN 是定义的节点的指针类型(就如同内置类型一样,是一种数据类型了。),此处作为返回值类型。(因为要创建链表,所以返回值类型当然就是节点指针类型)。
createlinked 是函数名。
typedef struct node
{
int data1;
char data2[10];
node *next;
}*ptrN;//定义一个节点指针类型。
ptrN node1,node2; //用此指针类型声明两个节点指针。
ptrN createlinked()//A
{
ptrN p1,p2,head; //声明三个节点指针。
int a;
char *ch=new char[20]; //
head=0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
while(1)
{
cin>>a;
if(a==-1)break;
cin>>ch;
p1=new node1;//申请一个节点的空间,并赋于指针p1.
p1->data1=a; //申请到内存就可以给节点的数据项赋值。
strcpy(p1->data2,ch); //这个是字符串copy,同样是写数据到节点p1.此时,数据赋值完毕。
if(head==0) //如果头节点为空。则
{ ///很明显,此链表用的是后插入法。(就是每建立一个新节点,就插到已有链表的最后面)。
head=p1; 将新建立的节点赋给头节点。
p2=p1; 并且将它保存起来,放到p2中。
}
else
{ //如果前一节点不这空,则
p2->next=p1; //将新建立的节点放到所有节点的后面。
p2=p1; //同样保存起来给下次使用。
}
}
if(head)p2->next=0;//这里就是将新插入的节点的next域写为空。构造成一个完整的链表。
delete ch;//释放在stack中申请的空间,防止泄漏。
return head; //返回链表的头节点。
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询