#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//插入元素
Status ListInsert_L(LinkList &L,int i,ElemType e){
LinkList p;
LinkList s;
p=L;int j=0;
while(p&&j<i-1){p=p->next;++j;}//寻找第i?1个结点
if(!p||j>i-1)return ERROR;//i大于表长?+?1或者小于1
s=new LNode;//生成新结点s
s->data=e; //将结点s的数据域置为e
s->next=p->next; //将结点s插入L中
p->next=s;
return OK;
}//ListInsert_L
//删除元素
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LinkList p,q;
p=L;int j=0;
while(p->next &&j<i-1){//寻找第i个结点,并令p指向其前驱
p=p->next; ++j;
}
if(!(p->next)||j>i-1) return ERROR; //删除位置不合理
q=p->next; //临时保存被删结点的地址以备释放
p->next=q->next; //改变删除结点前驱结点的指针域
e=q->data; //保存删除结点的数据域
delete q; //释放删除结点的空间
return OK;
}//ListDelete_L
void CreateList_L(LinkList &L,int n){// 后插法创建单链表
int i=0;
LinkList p,r;
L=new LNode;
r=L;
cout<<"请输入 "<<n<<" 个数:\n";
for(i=n;i>0;i--){
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
//寻找最小的元素并将最小元素的结点移作第一个元素结点
void FindMin_L(LinkList &L){
LinkList q,p,t;
int i=1,n;
ElemType min;
p=L->next;
min=p->data;
q=new LNode;
while(p){
if(min>p->data) {
min=p->data;
t=p;
n=i;
}
i++;
p=p->next;
}
ListDelete_L(L,n,min);
ListInsert_L(L,1,min);
}
//向递增有序插入元素
void Elem(LinkList &L,ElemType e){
LinkList p;
int i=1,n=0;
p=L->next;
while(p){
if(p->data<e) n=i;
p=p->next;
i++;
}
ListInsert_L(L,n+1,e);
}
void main(){
LinkList L,p,a;
int n=4,i;
ElemType e;
CreateList_L(L,n);
//输出表L
cout<<"链表L: "<<endl;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
//寻找最小的元素
FindMin_L(L);
cout<<"第一个元素最小的链表L: "<<endl;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
LinkList LA;
cout<<"递增有序 ";
CreateList_L(LA,n);
cout<<"输入插入元素:";
cin>>e;
Elem(LA,e);
cout<<"插入元素后的链表: "<<endl;
p=LA->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//插入元素
Status ListInsert_L(LinkList &L,int i,ElemType e){
LinkList p;
LinkList s;
p=L;int j=0;
while(p&&j<i-1){p=p->next;++j;}//寻找第i?1个结点
if(!p||j>i-1)return ERROR;//i大于表长?+?1或者小于1
s=new LNode;//生成新结点s
s->data=e; //将结点s的数据域置为e
s->next=p->next; //将结点s插入L中
p->next=s;
return OK;
}//ListInsert_L
//删除元素
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LinkList p,q;
p=L;int j=0;
while(p->next &&j<i-1){//寻找第i个结点,并令p指向其前驱
p=p->next; ++j;
}
if(!(p->next)||j>i-1) return ERROR; //删除位置不合理
q=p->next; //临时保存被删结点的地址以备释放
p->next=q->next; //改变删除结点前驱结点的指针域
e=q->data; //保存删除结点的数据域
delete q; //释放删除结点的空间
return OK;
}//ListDelete_L
void CreateList_L(LinkList &L,int n){// 后插法创建单链表
int i=0;
LinkList p,r;
L=new LNode;
r=L;
cout<<"请输入 "<<n<<" 个数:\n";
for(i=n;i>0;i--){
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
//寻找最小的元素并将最小元素的结点移作第一个元素结点
void FindMin_L(LinkList &L){
LinkList q,p,t;
int i=1,n;
ElemType min;
p=L->next;
min=p->data;
q=new LNode;
while(p){
if(min>p->data) {
min=p->data;
t=p;
n=i;
}
i++;
p=p->next;
}
ListDelete_L(L,n,min);
ListInsert_L(L,1,min);
}
//向递增有序插入元素
void Elem(LinkList &L,ElemType e){
LinkList p;
int i=1,n=0;
p=L->next;
while(p){
if(p->data<e) n=i;
p=p->next;
i++;
}
ListInsert_L(L,n+1,e);
}
void main(){
LinkList L,p,a;
int n=4,i;
ElemType e;
CreateList_L(L,n);
//输出表L
cout<<"链表L: "<<endl;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
//寻找最小的元素
FindMin_L(L);
cout<<"第一个元素最小的链表L: "<<endl;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
LinkList LA;
cout<<"递增有序 ";
CreateList_L(LA,n);
cout<<"输入插入元素:";
cin>>e;
Elem(LA,e);
cout<<"插入元素后的链表: "<<endl;
p=LA->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}