一、順序插入鏈表
#include<iostream>
using namespace std;
class node
{
public:
float data;
node *link;
};
node *insert(node *head,float n)
{
node *ptem=new node;
ptem->data=n;
if(n==-1)
{
delete ptem;
return head;
}
if(!head)
{
head=ptem;
head->link=0;
return head;
}
node *p1,*p2;
p1=head;
if(n<head->data)
{
ptem->link=head;
return ptem;
}
while(p1)
{
if(p1->link==0&&p1->data<=n)
{
p1->link=ptem;
ptem->link=0;
return head;
}
if(n<=p1->link->data&&n>=p1->data)
{
p2=p1->link;
p1->link=ptem;
ptem->link=p2;
return head;
}
p1=p1->link;
}
}
void print(node *head)
{
while(head)
{
cout<<head->data<<'\t';
head=head->link;
}
}
void del(node *head)
{
node *p;
while(head)
{
p=head->link;
delete head;
head=p;
}
}
void main()
{
node *head=0;
int len;
float n;
cout<<"請輸入要穿件鏈表的值,以-1結束\n";
while(true)
{
cin>>n;
if(n==-1)
break;
head=insert(head,n);
}
print(head);
del(head);
}
二、輸入數據並處理
#include<iostream>
using namespace std;
struct stunode
{
int num;
float score;
stunode *link;
};
stunode *insert(stunode *head,int id,float n)
{
stunode *ptem=new stunode;
ptem->num=id;
ptem->score=n;
if(n==-1)
{
delete ptem;
return head;
}
if(!head)
{
head=ptem;
head->link=0;
return head;
}
stunode *p1,*p2;
p1=head;
if(n>head->score)
{
ptem->link=head;
return ptem;
}
while(p1)
{
if(p1->link==0&&p1->score>=n)
{
p1->link=ptem;
ptem->link=0;
return head;
}
if(n>=p1->link->score&&n<=p1->score)
{
p2=p1->link;
p1->link=ptem;
ptem->link=p2;
return head;
}
p1=p1->link;
}
}
void print(stunode *head)
{
cout<<"ID\t"<<"Score"<<endl;
while(head)
{
cout<<head->num<<'\t'<<head->score<<endl;
head=head->link;
}
}
void del(stunode *head);
void del_fail(stunode *head,float n)
{
while(head)
{
if(head->score>=n&&head->link->score<n)
{
head->link=0;
del(head->link);
break;
}
head=head->link;
}
}
void del(stunode *head)
{
stunode *p;
while(head)
{
p=head->link;
delete head;
head=p;
}
}
void main()
{
stunode *head=0;
int num;
float n;
cout<<"請輸入編號、總分,以-1 -1結束\n";
while(true)
{
cin>>num;
cin>>n;
if(n==-1)
break;
head=insert(head,num,n);
}
print(head);
float fail_n;
cout<<"請輸入達標線:\n";
cin>>fail_n;
del_fail(head,fail_n);
cout<<"刪除不達標的數據後爲:\n";
print(head);
del(head);
}