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

希望大家帮帮我啊!我知道的问题已经标出来了。还有些未知的。语法上是对的。就是编译时候就出错了!
#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");
}

搜索更多相关主题的帖子: 链表 windows node include struct 
2007-08-20 03:10
wingyip
Rank: 1
等 级:新手上路
威 望:2
帖 子:119
专家分:0
注 册:2007-7-16
收藏
得分:0 
你定义的时候
linklist *p,*q;
要加*符号。
你再试试。

2007-08-23 19:20
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
收藏
得分:0 
以下是引用wingyip在2007-8-23 19:20:58的发言:
你定义的时候
linklist *p,*q;
要加*符号。
你再试试。

不用再加*了
因为linklist在上面定义的时候已经是*linklist


West and east,home is best……
2007-08-25 12:09
快速回复:[讨论]双向链表问题,请大家看看!
数据加载中...
 
   



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

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