例题一:
#include#include"1.h" int main(){ linkNode *L; InitList(L); ElemType a[]={1,2,3,4,5}; CreateListR(L,a,5); Reverse(L); DispList(L); }
例题二:
#include#include"1.h" int main(){ linkNode *L,*L1,*L2; InitList(L); InitList(L1); InitList(L2); ElemType a[]={1,2,3,4,5,6}; CreateListR(L,a,6); Split(L,L1,L2); DispList(L1); DispList(L2); }
例题三:
#include#include"1.h" int main(){ linkNode *L; InitList(L); ElemType a[]={1,6,10,5,2,0}; CreateListR(L,a,6); DeleteMax(L); DispList(L); }
.h文件
#include#include typedef int ElemType; struct linkNode{ ElemType Elem; linkNode *Next; }; //初始化 void InitList(linkNode *&L){ L=(linkNode*)malloc(sizeof(linkNode)); L->Next=NULL; } //销毁 void DestroyList(linkNode *&L){ linkNode *pre=L,*p=L->Next; while(p!=NULL){ free(pre); pre=p; p=pre->Next; } free(pre); } //判断是否为空 bool EmptyList(linkNode *L){ return (L->Next==NULL); } //求长度 int ListLength(linkNode *L){ int n=0; linkNode *p=L; while(p->Next!=NULL){ n++; p=p->Next; } return (n); } //输出 void DispList(linkNode *L){ linkNode *p=L->Next; while(p!=NULL){ printf("%d ",p->Elem); p=p->Next; } printf("n"); } //求数据元素值 bool GetElem(linkNode *L,ElemType i,ElemType &e){ int j; linkNode *p=L; for(j=0;jNext; e=p->Elem; } if(p==NULL) return false; else return e; } //按值查找元素 int LocateElem(linkNode *L,ElemType e){ int n=0; linkNode *p=L; while(p->Elem!=e&&p!=NULL){ n++; p=p->Next; } if(p==NULL) return 0; else return (n); } //头插法 void CreateListF(linkNode *&L,ElemType a[],int n){ linkNode *s; L=(linkNode *)malloc(sizeof(linkNode)); L->Next=NULL; for(int i=0;i Elem=a[i]; s->Next=L->Next; L->Next=s; } } //尾插法 void CreateListR(linkNode *&L,ElemType a[],int n){ linkNode *s,*r; L=(linkNode *)malloc(sizeof(linkNode)); r=L; for(int i=0;i Elem=a[i]; r->Next=s; r=s; } r->Next=NULL; } //删除 int ListDeleteNode(linkNode *&L,int i){ linkNode *p=L,*q; int j=0; for(int j=0;j Next; } if(!(p->Next)||(j>i-1)) return 0; q=p->Next; p->Next=q->Next; free(q); return 1; } //插入 bool ListInsert(linkNode *&L,int i,ElemType e){ int j=1; linkNode *p=L->Next,*s; while(j Next; j++; } if(p==NULL) return false; else{ s=(linkNode *)malloc(sizeof(linkNode)); s->Elem=e; s->Next=p->Next; p->Next=s; return true; } } //逆置 void Reverse(linkNode *&L){ linkNode *p=L->Next,*q; L->Next=NULL; while(p!=NULL) { q=p->Next; p->Next=L->Next; L->Next=p; p=q; } } //拆分单链表 void Split(linkNode *&L,linkNode *&L1,linkNode *&L2){ linkNode *p=L->Next,*q,*r1; L1=L; r1=L1; L2=(linkNode *)malloc(sizeof(linkNode)); L2->Next=NULL; while(p!=NULL){ r1->Next=p; r1=p; p=p->Next; q=p->Next; p->Next=L2->Next; L2->Next=p; p=q; } r1->Next=NULL; } // 删除单链表中最大的数 void DeleteMax(linkNode *&L){ linkNode *p=L->Next,*pre=L,*maxp,*maxpre; maxp=p; maxpre=pre; while(p!=NULL){ if(p->Elem>maxp->Elem){ maxp=p; maxpre=pre; } else{ pre=p; p=p->Next; } } maxpre->Next=maxp->Next; free(maxp); }



