#include<iostream> #include <malloc.h> #include <stdlib.h>
typedef int ElemType; using namespace std; typedef struct LNode { ElemType data; struct LNode *next; }LinkNode;
//初始化 void InitList(LinkNode *&L) { L=new LinkNode; L->next=NULL; } //尾插法--------插入 bool ListInsert(LinkNode *&L1,int i,ElemType e) { int j=0; LinkNode *s=L1,*r; if(i<=0) return false; while(j<i-1&&s!=NULL) { j++; s=s->next; } if(s==NULL) return false; else { r= new LinkNode; r->data=e; r->next=s->next; s->next=r;
return true; } }
//释放表 void DestoryList(LinkNode *&L) { LinkNode *T; if(L==NULL) return ; DestoryList(L->next); free(L);
} //结点数 int Lenghth(LinkNode *L) { if(L==NULL) return 0; return ( Lenghth(L->next)+1); } //正向输出所有节点值 void Dis(LinkNode *L) { if(L==NULL) return ; cout<<L->data<<" "; Dis(L->next); } //反向输出所有节点值 void fanDis(LinkNode *L) { if(L==NULL) return ; fanDis(L->next); cout<<L->data<<" "; } //删除值为X的数据结点(测试值为:8.4) void Dele(LinkNode *&L,ElemType e,int onlyall) //onlyall超重要的 { LinkNode *sa; if(L==NULL) return ; if(L->data==e) { sa=L; L=L->next; free( sa); if(onlyall==1) Dele(L,e,onlyall);
} else Dele(L->next,e,onlyall); }
//最大值 ElemType MAX(LinkNode *L) { ElemType e; if(L->next==NULL) return L->data; e=MAX(L->next); if(e>L->data) return e; else return L->data; } //最小值 ElemType MIN(LinkNode *L) { ElemType e; if(L->next==NULL) return L->data; e=MIN(L->next ); if(e>L->data) return L->data; else return e; }
int main() { LinkNode *L; ElemType z,temp; ElemType o[7]={13,15,8,4,8,3,4 }; cout<<"初始化L:"<<endl; InitList(L); cout<<"尾插法插元素7个:"; L->data=o[0]; for(int i=1;i<=6;i++) { ListInsert(L,i,o[i]); }
cout<<"正向输出:"; Dis(L); cout<<endl; cout<<"反向输出:"; fanDis(L); cout<<endl; cout<<"结点数:"<<Lenghth(L)<<endl; cout<<"你想删除哪个位置的元素(仅一个元素):"; cin>>temp; Dele(L,temp,0); Dis(L); cout<<endl; cout<<"你想删除哪个元素的位置(所有一样的):"; cin>>z; Dele(L,z,1); cout<<"线性表为:"; Dis(L); cout<<endl; cout<<"最大值:"<<MAX(L)<<endl; cout<<"最小值:"<<MIN(L)<<endl; cout<<"销毁over"; DestoryList(L); return 0;
} |