目录
写在最前面,欢迎各位大佬批评指正。
//利用原来的单链表中节点空间设计出三个单链表的算法
ps:当时没有实际跑,电脑过了一遍之后发现在处理每个链表的最后部分元素的时候会出现问题,自己的代码留着思考处理方法,最后放一个大佬利用链表插入做的方法。
//单链表中仅有三类字符的数据元素(大写字幕,数字和其他字符),
//利用原来的单链表中节点空间设计出三个单链表的算法
typedef char datatype;//其他字符
typedef struct LNode{
datatype data;
struct LNode *next;
}LNode,*LinkList;
void divide_to_3(Linklist L,Linklist &ha,Linklist &hb,Linklist &hc){
LinkList p;
p=L;
p=p->next;
Linklist q,r,i;
ha=q;
hb=r;
hc=i;
while(p){
if (p->data>='A' && p->data<='Z') {
q->next=p;
q=p;
}else if (p->data>='0' && p->data<='9') {
r->next=p;
r=p;
} else {
i->next=p;
i=p;
}
p=p->next;
}
}
※单链表实现简单选择排序算法
//这种方法是完全应用了简单选择排序的过程,复杂的地方在与她需要三个指针来进行移动。
//链式存储结构下的简单选择排序
typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;
void Simple_Select_Sort1(LinkList &L){
//每次从链表中选出一个最小值,设置一个节点每趟往后移动一个单位,将最小值和它的值交换。
LinkList p,q,s;
int min;
if(L==NULL&||L->next==NULL)
return;
for(q=L;q;q=q->next){
min=q->data;
s=q;
for(p=q->next;p;p=p->next){
if(min>p->data){
min=p->data;
s=p;//s保存了当前最小值的节点
}
if(s!=q){
s->data=q->data;
q->data=min;
}
}
}
}
//我们不在等到最小值交换,只要有比哨兵小的就交换
void SimpleSelectSort2(LinkList &L){
//每次从链表中选出一个最小值,设置一个节点每趟往后移动一个单位,将最小值和它的值交换。
int temp;
LinkList p,r;
p=L->next;
r=L->next;
temp=p->data;
for(;r;r->next){
while(p){
if(p->data<temp){
r->data=p->data;
r->data=temp;
}
p=p->next;
}
p=r;
}
}