单链表作为存储结构,实现简单选择排序

cclighting 2006-11-16 06:53:58
以单链表作为存储结构,实现简单选择排序,然后进行如下操作:
(1)若表中存在值为x的节点,则将它从表中删除;
(2)若表中不存在值为x的节点,就将x插入表中,并保持链表仍然有序;

我妹妹的作业题,大家帮个忙。
...全文
1858 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小青辣椒 2006-11-18
  • 打赏
  • 举报
回复
1.下面是链表的删除模板函数
操作-Delete
template<class T>
LinearList<T>& LinearList<T>::Delete(int k,T& x)
{//把第k个元素放入x中,然后删除第k个元素
//如果不存在第k个元素,则引发异常OutOfBounds
if(Find(k,x)){//把元素k+l,...向前移动一个位置
for(int i=k;i<length;i++)
element[i-l]=element[i];
length--;

主要的就是这个,然后自己组织一下就可以了
return *this;
}
else throwOutOfBounds(); }

2.下面是链表的插入函数
操作-Insert
template<class T>
LinearList<T>& LinearList<T>::Insert(int k,const T& x)
{ //在第k个元素之后插入x
//如果不存在第k个元素,则引发异常OutOfBounds
//如果表已经满,则引发异常NoMem
if(k<0||k>length) throw OutOfBounds();
if(length==MaxSize) throw NoMem();
//向后移动一个位置
for(int i=length-1;i>=k;i--)
element[i+l]=element[i];
element[k]=x;
length++;
return *this; }
peng14331 2006-11-18
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

struct linkcode{ //定义结构体
int data;
struct linkcode *next;
};
void swap(linkcode *a,linkcode *b)//交换内容
{
int temp=a->data;
a->data=b->data;
b->data=temp;
}
linkcode * SortLink(linkcode * head)
{
if(head==NULL) return NULL;
linkcode *p=head,*temp=head,*biaozhi=head;

int n=0;//链表长度
while(p) {n++;p=p->next;}

for(int i=1;i<n;i++)//n次选择
{
temp=biaozhi;p=biaozhi;
while(p)
{
if(p->data<temp->data) temp=p;
p=p->next;
}
swap(biaozhi,temp);
biaozhi=biaozhi->next;

}
return head;

}
//以下为举例应用
void main()
{
//建立一个链表,带表头的
linkcode *linkhead=(linkcode *)malloc(sizeof(linkcode)*1);
linkhead->data=0;
linkhead->next=NULL;
linkcode *x=linkhead;
for(int i=0;i<10;i++)
{
linkcode *eg=(linkcode *)malloc(sizeof(linkcode)*1);
eg->data=20-i;
eg->next=NULL;
x->next=eg;
x=x->next;

}
x->next=NULL;

linkcode *y=linkhead;
while(linkhead)//输出链表,为一个倒序的
{ cout<<linkhead->data<<endl;
linkhead=linkhead->next;
}

linkhead=SortLink(y);//调用排序

while(linkhead)//输出排序后的链表
{ cout<<linkhead->data<<endl;
linkhead=linkhead->next;
}

}
写了个选择排序的实现,至于插入、删除对于排好序的链表来说很简单了。
写的不好。
LiChenYue 2006-11-16
  • 打赏
  • 举报
回复
(1)若表中存在值为x的节点,则将它从表中删除;
比较,删除,容易的对吧,

(2)若表中不存在值为x的节点,就将x插入表中,并保持链表仍然有序;
在一趟扫描之后,如果要插入的话,就再扫一遍,冒泡到要插的地方,插就好了。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧