设单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点。
来源:互联网 发布:手机数据dns劫持 编辑:程序博客网 时间:2024/04/29 13:34
#include <iostream>
using namespace std;
typedef int T;
struct node
{
T data;
node *next;
};
class LinkList
{
public:
LinkList(); //无参数的构造函数
LinkList(T a[],int n); //有参数的构造函数
~LinkList();
void Print(); //单链表遍历函数
void noSample(); //单链表删除相同值的算法;
private:
node *first;
};
LinkList::LinkList()
{
first = new node;
first -> next = NULL;
}
LinkList::LinkList(T a[],int n)//头插法建立单链表
{
first = new node;
node *s;
first -> next = NULL;
for(int i=0;i<n;i++){
s = new node;
s->data = a[i];
s->next = first->next;
first->next = s;
}
}
void LinkList::Print()
{
node *p;
p = first->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//从头到尾扫描单链表,若当前结点的元素值与后继结点的元素值不相等,则指针后移;
//否则删除 该后继结点。
void LinkList::noSample()
{
node *p=first->next;
node *q;
while(p->next){
if(p->data == p->next->data){
q=p->next;
p->next=q->next;
delete q;
}
else p=p->next;
}
}
LinkList::~LinkList()
{
node *q;
while(first!=NULL){
q = first;
first = first->next;
delete q;
}
}
int main()
{
int n = 10;
T a[n];
cout<<"输入10个数头插法建立链表"<<endl;
for(int j=0;j<n;j++)
cin>>a[j];
LinkList s(a,n); //声明S这个对象 调用有参数的构造函数;
cout<<"头插法建立链表后遍历"<<endl;
s.Print();
s.noSample();
cout<<"删除相邻且相同的节点输出后的结果为:"<<endl;
s.Print();
}
using namespace std;
typedef int T;
struct node
{
T data;
node *next;
};
class LinkList
{
public:
LinkList(); //无参数的构造函数
LinkList(T a[],int n); //有参数的构造函数
~LinkList();
void Print(); //单链表遍历函数
void noSample(); //单链表删除相同值的算法;
private:
node *first;
};
LinkList::LinkList()
{
first = new node;
first -> next = NULL;
}
LinkList::LinkList(T a[],int n)//头插法建立单链表
{
first = new node;
node *s;
first -> next = NULL;
for(int i=0;i<n;i++){
s = new node;
s->data = a[i];
s->next = first->next;
first->next = s;
}
}
void LinkList::Print()
{
node *p;
p = first->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//从头到尾扫描单链表,若当前结点的元素值与后继结点的元素值不相等,则指针后移;
//否则删除 该后继结点。
void LinkList::noSample()
{
node *p=first->next;
node *q;
while(p->next){
if(p->data == p->next->data){
q=p->next;
p->next=q->next;
delete q;
}
else p=p->next;
}
}
LinkList::~LinkList()
{
node *q;
while(first!=NULL){
q = first;
first = first->next;
delete q;
}
}
int main()
{
int n = 10;
T a[n];
cout<<"输入10个数头插法建立链表"<<endl;
for(int j=0;j<n;j++)
cin>>a[j];
LinkList s(a,n); //声明S这个对象 调用有参数的构造函数;
cout<<"头插法建立链表后遍历"<<endl;
s.Print();
s.noSample();
cout<<"删除相邻且相同的节点输出后的结果为:"<<endl;
s.Print();
}
1 0
- 设单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点。
- 设单链表以非递减有序排列,设计算法实现在单链表中删除值相同的多余结点
- 在单链表中删除值相同的多余结点的算法。
- 已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
- 设计在单链表中删除值相同的多余结点的算法
- 设ha和hb分别是两个带头节点的费递减有序单链表的表头指针,设计以算法,将将两个有序链表合成一个非递减的有序单链表,该程序以以前发表的博客中的链表中的区别在与该立案表带有头结点
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 在非递减的有序单链表中插入一个值为x的数据元素,并使单链表仍保持有序的操作
- ha,hb为带头结点的非递减有序单链表,利用原空间生成的非递减有序单链表
- 将两个有序表合并成一个非递减的有序表算法
- 【C语言版数据结构】线性表的链式表示,并且实现合并两个非递减有序排列到新的线性表
- 元素按值非递减有序排列,设计一个…
- 有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。
- 线性表LA和LB非递减有序排列,将LA,LB进行归并为新的线性表LC,要求LC中的数据元素扔非递减有序列排列
- 非递减排列 非递增排列 递减排列 递增排列
- 试设计一个算法,将元素e插入L中合适的位置,使插入后L仍为非递减有序。
- 非有序全排列生成算法集锦
- linux 安装mysql 步骤
- Leetcode 119. Pascal's Triangle II 杨辉三角2 解题报告
- Luogu CON1041 NOIP模拟赛一试提示
- 1070. Mooncake (25)
- 7天入门php-异常类及异常处理
- 设单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点。
- ECOC编码
- Android多渠道打包(四):360多渠道打包
- java基础——for 与foreach效率
- hdu5115(区间dp)
- 【codevs 1214】线段覆盖
- update.zip包的签名
- 【NOIP2016提高A组五校联考3】打工 题解
- 子集生成的两种方法