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

用c++编写一个函数:从给定的链表A中删除元素值在x到y(x<=y)间的所有元素.
谢谢了!!

搜索更多相关主题的帖子: 链表 
2006-09-26 22:16
zmyy214
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 

没人理.....


2006-09-28 14:02
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

你可以用一个for循环,然后配合类似 if( p->data >= x && p->data <= y)的判断来做,至于单链表的基本操作,请查看相关用C++语言描述的数据结构书籍.


c++/C + 汇编 = 天下无敌
2006-09-28 16:11
ausher
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-10-3
收藏
得分:0 

遍历链表,然后把符合条件的都删掉不就O了

2006-10-03 11:55
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
/*C写的*/

void del_x_y(nodelink head,datatype x,datatype y)//带头结点.
{
nodelink pre,p;
p=head;
while(p)
{
pre=p;
p=p->next;
if((p->info<y)&&(p->info>x))
{
pre->next=p->next;
free(p);
p=pre;
}
}
}

倚天照海花无数,流水高山心自知。
2006-10-04 21:46
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
这都应该自己写

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-10-05 16:02
zmyy214
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 
真是惭愧....我要好好学习!!

2006-10-07 22:51
zmyy214
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 

#include<iostream.h>
template <class T>
struct Node
{
T data;
Node<T> *next; //此处<T>也可以省略
};

template <class T>
class LinkList
{
public:
LinkList( ); //建立只有头结点的空链表
LinkList(T a[ ], int n); //建立有n个元素的单链表
~LinkList(); //析构函数

void PrintList( );//遍历单链表,按序号依次输出各元素
void del_x_y(T x,T y);
private:
Node<T> *first; //单链表的头指针
};
template <class T>
LinkList<T>:: LinkList( )
{
first=new Node<T>; first->next=NULL;
}
template <class T>
LinkList<T>:: LinkList(T a[ ], int n)
{
first=new Node<T>; //生成头结点
Node<T> *r,*s;
r=first; //尾指针初始化
for (int i=0; i<n; i++)
{
s=new Node<T>; s->data=a[i]; //为每个数组元素建立一个结点
r->next=s; r=s; //插入到终端结点之后
}
r->next=NULL; //单链表建立完毕,将终端结点的指针域置空
}
template <class T>
LinkList<T>:: ~LinkList()
{
}
template <class T>
void LinkList<T>::PrintList( )
{
Node<T> *p;
p=first->next;
while (p)
{
cout<<p->data<<endl;
p=p->next;
}

}
template <class T>
void del_x_y(T x,T y){
Node<T> *p; int j;
p=first ; j=0; //工作指针p初始化
while(p){
p=p->next;
j++;
}
if (!p || !p->next) throw "位置"; //结点p不存在或结点p的后继结点不存在
else if( p->data >= x && p->data <= y){
Node<T> *q;
q=p->next; //暂存被删结点
p->next=q->next; //摘链
delete q;
}
void main( )
{int r[ ]={1,2,3,4,5};
LinkList <int> b(r,5);
b.PrintList(); //输出单链表所有元素
b.del_x_y(2,4);
b.PrintList();
}


请问,上述程序错在哪里?老是调不好.....谢谢了!


2006-10-08 15:57
zmyy214
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 
另外,有必要把del_x_y设置成类的友元函数来调用delete函数吗?如果有,该怎么写?

2006-10-08 15:59
skyme
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-2-28
收藏
得分:0 
没有必要用到友元函数吧 直接就定义一个函数
int searchNode(int el)
{
Node *ptr;
int a=1;
for(ptr=head;ptr!=NULL&&ptr->data!=el;ptr=ptr->next,a++)
return a;
}

a就是计数器 , 当有这个元素结点就返回a的值 找到两个结点所对应的a 值 就用for循环删除接点就可以了

2006-10-08 20:43
快速回复:[求助]请教一个链表问题
数据加载中...
 
   



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

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