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

#include<iostream>
#include<windows.h> //windows 相关
#include<time.h> //时间函数
using namespace std;
#define NULL 0
typedef struct node
{
int data;
struct node *prior;
struct node *next;
}node,*linklist; //定义节点
void sort(linklist l); //声明排序函数
void del(linklist l); //声明删除多于相同元素的节点函数
int linklong(linklist l); //声明求出链表长度函数duide
void nizhi(linklist l); //声明逆置链表函数
void insret(linklist l,int e); //声明 插入元素函数dui
void shuchu(linklist l,int n); //声明向屏幕输出链表函数
void create(linklist l); //声明建立链表函数
void sort(linklist l) //排序函数
{
linklist p,q;
p=l->next;
int i;
while(p) //冒泡排序法
{
q=p->next;

while(q)
{
if(p->data>q->data)
{
i=p->data;
p->data=q->data;
q->data=i;
}
p=p->next;
}
}
}
void del(linklist l) //删除多于相同元素的节点
{
linklist p,q,temp;
p=l->next;
q=p->next;
while(q)
{
if(p->data==q->data)
{
temp=q;p->next=temp->next;
q=q->next;p->next->prior=q->prior;
delete temp;
}
p=p->next;
}
}
int linklong(linklist l) //求出链表长度
{
int link_length;
linklist p;p=l->next;
while(p)
{
p=p->next;link_length++;
}
return link_length;
}
void nizhi(linklist l) //逆置链表
{
linklist p,s;
p=l->next;p->prior=l;
l->next=NULL;
while(p)
{
s=p->next;
p->next=l->next;p->next->prior=l;
l->prior=p;
l->next=p;
p=s;
}
}
void insret(linklist l,int e) // 插入元素
{
linklist q;int i;
q=new node;q->data=e;
q=l->next;
while(q->data>q->next->data)
{
i=q->data;
q->data=q->next->data;
q->next->data=i;
q=q->next;
}
}
void shuchu(linklist l) //向屏幕输出链表
{
linklist p;p=l->next;
if(!(p->data))
{
cout<<"\n\n"<<endl;
cout<<" 链表没有建立"<<endl;
time_t start,end; // 函数
start=time(NULL);
end=time(NULL);
while(end-start<3)
{
end=time(NULL);
}
return;
}
else
{
cout<<"\n\n"<<"\n"<<" 您建立的链表为"<<"\n"<<endl;
while(p)
{
cout<< p->data<<" ";
p=p->next;
}
}
}
void create(linklist l) //建立链表
{ system("cls");
linklist p; int i,n;
cout<<"\n\n\n"<<endl;
cout<<" 请输入你的链表长度:"<<" ";
cin>> n;cout<<endl;
if(n>0) //判断输入是否正确
{
cout<<" 请输入整数形数据:";
for(i=1;i<=n;i++)
{
p=new node;
cin>> p->data;
if(i==1)
{
l=p;
}
else
{

p->next=l;p->prior=l->prior;p->next=p;
}
}sort(l);shuchu(l); //有问题的地方
}
else
{

cout<<"输入错误"<<"\n"<<"请重新输入"<<endl; //重新建立链表
create(l);
} //先排序在输出
}


void main()
{
system("color 04"); //颜色设置
linklist l=new node;
l->next=l->prior=l;int j, i,in,e;
cout<<"\n\n\n"<<endl;
cout<<" 是否要建立链表?"<<"1是,0否:";
cin>>j;
system("cls");
if(1)
{
create(l);
time_t start,end; // 函数
start=time(NULL);
end=time(NULL);
while(end-start<1)
{
end=time(NULL);
}
}
else return;
cout<<endl<<endl<<endl;
do
{
system("cls"); //清屏
cout<<"\n\n"<<endl;
cout<<"\t\t ┌───────────┐ \n";
cout<<"\t\t │ 双向链表 │ \n";
cout<<"\t\t │ ┄┄┄┄┄┄┄┄┄┄ │ \n";
cout<<"\t\t │ 1.删除重复元素 │ \n";
cout<<"\t\t │ 2.求出长度 │ \n";
cout<<"\t\t │ 3.逆置链表 │ \n";
cout<<"\t\t │ 4.向链表中插入值 │ \n";
cout<<"\t\t │ 5.退 出 │ \n";
cout<<"\t\t └───────────┘ \n";
cout<<"\t\t 请您正确选择:";
cin>>in;
switch(in)
{
case 1:
{
del(l);shuchu(l);
}break;
case 2:linklong(l);break;
case 3:nizhi(l);break;
case 4:
{
cout<<"\n\n\n"<<"请输入你需要插入的元素!"<<endl;
cin>>e;cout<< e<<endl;
insret(l,e);break;
}
case 5:return;
default:
{
system("cls");
cout<<"输入错误,请正确输入"<<endl;
cout<<endl<<endl<<endl;
cout<<" 没有您想要的操作,是否重新选择?";
cout<<"1是,0否:";
cin>>i;


}
}
}while(1);
system("cls");
}

搜索更多相关主题的帖子: 链表 
2007-08-20 03:02
lizhihua
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-8-2
收藏
得分:0 
希望大家帮帮我啊!
2007-08-20 03:03
lizhihua
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-8-2
收藏
得分:0 

有问题的地方我表出来了, }sort(l);shuchu(l); //有问题的地方
思路是现排序在输出。今天有调试了。原因也不好说。同学说是死循环。我这个是单项链表。在请大家指正啊!

2007-08-20 17:01
lizhihua
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-8-2
收藏
得分:0 

呵呵,的确问题很多。没办法我有重写了。刚开始学这。有脑子点混乱了。谢谢指正!

2007-08-21 17:22
快速回复:双向链表的问题!请大家看看!
数据加载中...
 
   



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

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