首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出,哪里出了有关问题?求解答

2012-03-15 
键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出,哪里出了问题?求解答。#includeiostrea

键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出,哪里出了问题?求解答。
#include<iostream>
using namespace std;

struct node
{
int val;
node *pre,*next;
};
void insert(node* &L,int x);
void print(node *L);
void main()
{
node *la;
la->val=0;
la->next=la;
la->pre=la;
int x;
cout<<"请输入正整数序列,空格隔开并以-1结尾"<<endl;
while(1)
{
cin>>x;
if(x==-1)
break;
insert(la,x);
}
print(la);
}

void insert(node* &L,int x)
{
node *p,*temp,*pre;
p=new node;
p->val=x;
if(L->next==L)
{
L->next=p;
p->pre=L;
p->next=L;
L->pre=p;
}
else
{
temp=L;
while(temp->next->val <= x)
{
pre=temp;
temp=temp->next;
}
pre->next=p;
p->pre=pre;
p->next=temp;
temp->pre=p;
}
}
void print(node *L)
{
node *p;
p=L->pre;
while(p->pre!=L)
{
cout<<p->val<<" ";
p=p->pre;
}
}

[解决办法]
while(temp->next->val <= x)
判断条件是不是有问题,如果已知链表中没有比输入值X大的参数,那链表不就成了死循环了。
[解决办法]
node *la;
la->val=0;
la->next=la;
la->pre=la;
都没给la赋初值,怎么能使用la->val=0呢;应该为:node *la = new node;
while(temp->next->val <= x)
如果输入的值都大于x呢,就成了死循环了

[解决办法]
[code=C/C++][/code]#include<iostream>
using namespace std;

struct node
{
int val;
node *pre,*next;
};

void insert(node* &L,int x);
void print(node *L);

void main()
{
node *la,l;
la = &l;
la->val=0;
la->next=la;
la->pre=la;
int x;
cout<<"请输入正整数序列,空格隔开并以-1结尾"<<endl;
while(1)
{
cin>>x;
if(x==-1)
break;
insert(la,x);
}
print(la);
}

void insert(node* &L,int x)
{
node *p,*temp,*pre;
p=new node;
p->val=x;
if(L->next==L)
{
L->next=p;
p->pre=L;
p->next=L;
L->pre=p;
}
else
{
temp=L;
while(temp->val <= x && temp->next != L)\
{
pre=temp;
temp=temp->next;
}
if(temp->next == L)
{
p->next = L;
temp->next = p;
p->pre = temp;
L->pre = p;
}
else
{
pre->next=p;
p->pre=pre;
p->next=temp;
temp->pre=p;
}
}
}

void print(node *L)
{
node *p;
p=L->pre;
while(p != L)
{
cout<<p->val<<" ";
p=p->pre;
}
}
[解决办法]
1.初始化node要给其分配空间。
2.循环是while(temp->next->val <= x && temp->next!=L)
3.是在Temp的后面插入p,所以应该是
 p->next=temp->next;
 temp->next->pre=p;
 temp->next=p;
 p->pre=temp;
4.print函数的循环应该是while(p!=L),不然会少打印一个最小的数



[解决办法]

C/C++ code
#include<iostream>using namespace std;struct node{    int val;    node *pre,*next;};void insert(node* L,node * p,int x);void print(node *L);void de(node*L);int main(void){    node *la=new node;    la->val=0;    la->next=la;    int x;    cout<<"请输入正整数序列,空格隔开并以新的一行Ctil+Z结尾"<<endl;    while(cin>>x)    {        node *p;        p=new node;        insert(la,p,x);    }    print(la);    de(la);    return 0;}void insert(node* L,node* p,int x){    node *temp=L;    node *pp=p;    pp->val=x;    if(L->next==L)    {        L->next=pp;        pp->pre=L;        pp->next=L;        L->pre=pp;    }    else    {        while(temp->next->val<=x)        {            temp=temp->next;            if(temp->next==L)            break;        }        pp->next=temp->next;        temp->next->pre=pp;        temp->next=pp;        pp->pre=temp;            }}void print(node *L){    node *p;    p=L->pre;    while(p->pre!=L->pre)    {        cout<<p->val<<" ";        p=p->pre;    }} void de(node *L){    node *tem;    tem=L;    while(tem!=L->next)    {        L=L->next;        delete(L->pre);    }    delete(tem);    delete(L);} 

热点排行