顺序表 插入节点:
#include<iostream>
using namespace std;
struct act
{
int num;
struct act *next;
};
int n,k,flag=1;
int main()
{
act *p,*p2,*p1,*head,*p3;
cin>>n;
p1=p2=new act;
head=NULL;
while(n--)
{
cin>>p1->num;
if(flag)
{
flag=0;
head=p1;
}
else p2->next=p1;
p2=p1;
if(n)
p1=new act;
}
p2->next=NULL;
cin>>k;
p=head;
while(p->num<k&&p->next!=NULL)
p=p->next;
p3=new act;
p3->num=k;
for(act *pt=head;pt!=NULL;pt=pt->next)
{
if(pt->num>k)
{
p2->next=p3;
p3->next=pt;
break;
}
if(pt->next==NULL)
{
pt->next=p3;
p3->next=NULL;
break;
}
p2=pt;
}
p=head;
if(head)
do
{
cout<<p->num<<" ";
p=p->next;
}while(p!=NULL);
return 0;
}
链表实现冒泡:
#include<iostream>
using namespace std;
struct act
{
int num;
act *next;
};
int n,k,flag=1;
int main()
{
act *head,*p,*p1,*p2,*p3;
head=NULL;
p1=p2=new act;
cin>>n;
int d=n;
while(n--)
{
cin>>p1->num;
if(flag)
head=p1,flag=0;
else p2->next=p1;
p2=p1;
if(n)
p1=new act;
}
p2->next=NULL;
p3=new act;
p3->next=head;
head=p3;
p=head->next;
while(d>1)
{
while(p->next!=NULL)
{
if(p->num>p->next->num)
{
int temp;
temp=p->num;
p->num=p->next->num;
p->next->num=temp;
}
p=p->next;
}
d--;
p=head->next;
}
p1=head;
head=head->next;
delete(p1);
p1=NULL;
p1=head;
do
{
cout<<p1->num<<" ";
p1=p1->next;
}while(p1!=NULL);
return 0;
}
链接实现选择排序:
#include<iostream>
using namespace std;
const int INF=0x3f3f3f3f;
struct act
{
int num;
struct act *next;
};
int main()
{
act *head,*p,*p1,*p2,*p3;
int n,flag=1;
p1=p2=new act;
cin>>n;
while(n--)
{
cin>>p1->num;
if(flag)
head=p1,flag=0;
else p2->next=p1;
p2=p1;
if(n)
p1=new act;
}
p2->next=NULL;
act *p4;
p4=new act;
p4->next=head;
head=p4;
p=head;
for(int i=0;i<n;i++)
{
int ma=INF;
for(p1=head;p1->next!=NULL;p1=p1->next)
if(p1->next->num<ma)
{
ma=p1->next->num;
p3=p1;
}
p2=head->next;
p4=p3->next->next;
head->next=p3->next;
p3->next->next=p2->next;
p3->next=p2;
p2->next=p3->next->next;
head=head->next;
}
p=head;
while(p!=NULL)
{
cout<<p->next<<" ";
p=p->next;
}
return 0;
}
、
冒泡实现:
#include<iostream>
#include<string.h>
using namespace std;
struct student
{
int num; //学号
struct student *next; //指向下一节点的指针
};
int n; //节点总数
student *creat(void) //创建 返回以地址形式
{
student *head; //创建一个头指针
student *p1,*p2; //两个工作指针
p1=p2=new student;//开辟一个新单元,使p1 p2 指向他
cin>>p1->num; //输入数据
head=NULL;
while(p1->num!=0)//输入的学号不能为0 为0就结束输入
{
n=n+1;
if(n==1) head=p1;//第一个数据头指针指向第一个
else p2->next=p1;//
p2=p1;
p1=new student;
cin>>p1->num;
}
p2->next=NULL;
return head;
}
void print(student *head) //输出
{
student *p;
cout<<"Now,These "<<n<<" records are:"<<endl;
p=head;
if(head!=NULL)
do
{
cout<<p->num<<endl;
p=p->next;
}while(p!=NULL);
}
student *bubblesort(student *head)
{
student *endpt; //控制循环比较
student *p; //临时指针变量
student *p1,*p2;
p1=new student;
p1->next=head;
head=p1;
for(endpt=0;endpt!=head;endpt=p)
for(p=p1=head;p1->next->next!=endpt;p1=p1->next)
{
if(p1->next->num>p1->next->next->num)
{
p2=p1->next->next;//保存最后一个点
p1->next->next=p2->next;
p2->next=p1->next;
p1->next=p2;
p=p1->next->next;
}
}
p1=head;
head=head->next;//头指针向后一位
delete p1;
p1=0;
return head;
}
int main()
{
student *head,*stu;
head=creat();
head=bubblesort(head);
print(head); //输出当前节点
return 0;
}
栈之链表:
#include<iostream>
using namespace std;
struct act
{
char ch;
struct act *next;
};
int n,flag=1;
int main()
{
act *head,*p,*p1,*p2;
cin>>n;
head=NULL;
p1=p2=new act;
while(n--)
{
cin>>p1->ch;
if(flag)
head=p1,flag=0;
else p2->next=p1;
p2=p1;
if(n) p1=new act;
}
p2->next=NULL;
p=head;
while(p)
{
cout<<p->ch<" ";
p=p->next;
}
cout<<endl;
return 0;
}