| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 825 人关注过本帖
标题:一关于双向链表的程序,不会调试
只看楼主 加入收藏
ddihc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-25
收藏
 问题点数:0 回复次数:1 
一关于双向链表的程序,不会调试

请高手帮忙调试一下:
设计内容和要求
1. 建立双向链表L,含n个结点且按整数值递增排列的(输入任意);
2. 删除双向链表中多余的值相同的元素
3. 求出的长度
4. 将双向链表就地逆置
5. 向双向链表中插入值,插入后双向链表仍有序

#include<iostream.h>
#define NULL 0
typedef struct dlnode
{
int data;
struct dlnode *prior,*next;
}dlnode,*dlinkist;
dlinkist H;
void fuzhi(int n)
{
dlnode *s;
int i=1,j;
cout<<"请给链表赋值:"<<endl;
do
{
s=new dlnode;
cin>>s->data;cin>>",";
s->prior=H;
s->next=H->next;
H->next=s;
i++;
if(s->data=NULL)
{
cout<<"您是否确定不再赋值?1表示“确定”,0表示“取消”。请选择:";
cin>>j;
}
if(j)break;
else continue;
}while(i<n);
if(i>n)cout<<"您已赋值完毕!"<<endl;
return;
}
void chazhao(dlinkist p,int x)
{
do
{
if(p->data==x)return;
else p=p->next;
}while(p->next!=H);
if(p->next==H)
{
p=H;
return;
}
}
void charu()
{
dlinkist p=H;
int i,j,x;
cout<<"请问你想在哪个数后面插入数值?";
cin>>x;
chazhao(p,x);
if(p!=H)
{
cout<<"您输入的数值存在,是否要在该数后面插入数值?"
<<"1表示“确定”,0表示“取消”:";
cin>>i;
if(i)
{
cout<<"请输入您要插入的数值:";
cin>>p->data;
cout<<"插入成功。"<<endl;
}
else return;
}
else
{
cout<<"没有你想找的数值。"<<"是否重新输入?"
<<"1是,0否:";
cin>>j;
if(j)
{
charu();
return;
}
else return;
}
}
void sanchu()
{
dlinkist p=H;
int x,i;
cout<<"请输入您要删除的数据:";
cin>>x;
chazhao(p,x);
if(p!=H)
{
cout<<"是否删除该数据?1是,0否。请选择:";
cin>>i;
if(i)
{
p->next->prior=p->prior;
p->prior->next=p->next;
delete p;
}
else
{
cout<<"是否继续?"
<<"1是,0否:";
cin>>i;
if(i)
{
sanchu();
return;
}
return;
}
}
}
int biaochang()
{
int i;
dlinkist p=H;
do
{
p=p->next;
i++;
}while(p->next!=H);
return i;
}
void paixu()
{
dlinkist q=H->next;
int i,j;
i=biaochang()-1;
for(j=0;j<i;j++)
{
do
{
if(q->data>(q+1)->data)
{
H->data=q->data;
q->data=(q+1)->data;
(q+1)->data=H->data;
}
q=q->next;
}while(q->next!=H);
}
}
void nizhi()
{
dlinkist p,q;
p=H->next;q=H->prior;
do
{
H->data=p->data;
p->data=q->data;
q->data=H->data;
p=p->next;
q=q->prior;
}while(p!=q);
}
void shuchu()
{
dlinkist p=H->next;
do
{
cout<<p->data<<" ";
p=p->next;
}while(p->next!=H);
}
void main()
{
int n;
cout<<"请确定结点数n:";
cin>>n;
while(n<0)
{
cout<<"n非法,请重新输入n:";
cin>>n;
}
int i=0,j;
cout<<"是否要给链表各结点赋值?(1是,0否)";
cin>>j;
if(j==1)
{
fuzhi(n);
}
char str;
do
{
cout<<"请选择对链表进行的操作。"
<<"a表示插入数值,b表示删除同样的数值,c表示对链表进行排序,"
<<"d表示逆置链表,e表示求表长,f表示输出链表:";
cin>>str;
switch(str)
{
case'a':charu();break;
case'b':sanchu();break;
case'c':paixu();break;
case'd':nizhi();break;
case'e':{cout<<"表长为"<<biaochang()<<endl;}break;
case'f':shuchu();break;
default:
{
i=1;
cout<<"没有您想要的操作,请重新选择"<<endl;
}
}
}while(i);
}

搜索更多相关主题的帖子: 链表 dlnode int 调试 
2007-07-26 01:40
EBC
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2005-4-27
收藏
得分:0 

兄台,请把注释加清楚,谢谢,这是个好习惯

2007-07-29 22:14
快速回复:一关于双向链表的程序,不会调试
数据加载中...
 
   



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

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