本文共 3963 字,大约阅读时间需要 13 分钟。
存档-----------
1 #include2 typedef char ElemType; 3 #include "LinkList.h" 4 void main() 5 { 6 LinkList h; 7 ElemType e; 8 int i=0; 9 int t=0;10 cout<<"(1)初始化单链表h\n";11 InitList(h);12 cout<<"(2)单链表为"<<(ListEmpty(h)?"空":"非空")< >e;15 i=1;16 while(e!='#')17 {18 ListInsert(h,i,e);19 i++;20 cin>>e;21 }22 cout<<"(4)输出单链表h:";23 PrintList(h);24 cout<<"(5)单链表h的长度="< < >i;28 t=GetElem(h,i,e);29 if(t)30 cout<<"(6)单链表h的第"< <<"个元素="< < >e;35 t=LocateElem(h,e);36 if(t)37 cout<<"(7)元素"< <<"的位置="< < >i;43 cout<<"请输入e的值:";44 cin>>e;45 cout<<"(8)在第"< <<"个元素位置上插入"< <<"元素:";46 t=ListInsert(h,i,e);47 if(t)48 cout<<"成功!\n";49 else50 cout<<"失败!\n";51 cout<<"(9)输出单链表h:";52 PrintList(h);53 cout<<"(10)测试ListDelete(L,i,e)函数,请输入i的值"< >i;55 cout<<"(10)删除h的第"< <<"个元素:";56 t=ListDelete(h,i,e);57 if(t)58 cout<<"成功!\n";59 else60 cout<<"失败!\n";61 cout<<"(11)输出单链表h:";62 PrintList(h);63 cout<<"(12)释放单链表h\n";64 DestoryList(h);65 }
1 typedef struct LNode//定义单链表结点类型 2 { 3 ElemType data; 4 struct LNode *next; 5 }LNode,*LinkList; 6 int InitList(LinkList &L) 7 { 8 //初始化只含有头结点的空的单链表 9 L=new LNode;//创建头结点 10 if(L==NULL) 11 { 12 cout<<"结点分配失败\n"; 13 return 0; 14 } 15 L->next=NULL; 16 return 1; 17 } 18 void ClearList(LinkList &L) 19 { 20 //清空单链表,仅保留头结点 21 LinkList p; 22 while(L->next) 23 { 24 p=L->next; 25 L->next=p->next; 26 delete p; 27 } 28 } 29 int ListLength(LinkList L) 30 { 31 //返回单链表的长度 32 LinkList p=L; 33 int i=0; 34 while(p->next!=NULL)//数到最后一个结点为止 35 { 36 i++; 37 p=p->next; 38 } 39 return i; 40 } 41 void PrintList(LinkList L) 42 { 43 //顺序输出单链表中的各元素 44 LinkList p=L->next; 45 while(p!=NULL) 46 { 47 cout<data<<" "; 48 p=p->next; 49 } 50 cout< next==NULL) 56 return true; 57 else 58 return false; 59 } 60 int GetElem(LinkList L,int i,ElemType &e) 61 { 62 //用e返回单链表L中第i个元素的值 63 if(i<1) 64 return 0; 65 LinkList p=L->next; 66 int j=1; 67 while(j next; 70 j++; 71 } 72 if(p==NULL)//j data; 77 return 1; 78 } 79 } 80 int LocateElem(LinkList L,ElemType e) 81 { 82 //返回e元素在单链表L中的位序,若不存在,返回0 83 LinkList p=L->next; 84 int n=1; 85 while(p!=NULL&&p->data!=e) 86 { 87 p=p->next; 88 n++; 89 } 90 if(p==NULL)//直到最后也没找到等于元素e的结点 91 return 0; 92 else 93 return n; 94 } 95 int ListInsert(LinkList &L,int i,ElemType e) 96 { 97 //在单链表L的第i个数据元素之前插入数据元素e 98 if(i<1) 99 return 0;100 int j=0;//在1号位置插入时,i-1号位置是0号位置101 LinkList p=L,s;102 while(j next;105 j++;106 }107 if(p==NULL)//未找到第i-1个结点,即i超出了[1..n+1]时108 return 0;109 else//找到第i-1个结点p110 {111 s=new LNode;//创建新结点s112 if(s==NULL)113 {114 cout<<"结点分配失败\n";115 return 0;116 }117 s->data=e;118 s->next=p->next;//将s插入到p之后119 p->next=s;120 return 1;121 }122 }123 int ListDelete(LinkList &L,int i,ElemType &e)124 {125 //删除单链表L中第i个结点,并用e返回其值126 if(i<1)127 return 0;128 LinkList p=L,q;129 int j=0;130 while(j next)!=NULL)//寻找第i-1个结点,且第i-1号元素不是最后一个元素131 {132 p=p->next;133 j++;134 }135 if((p->next)==NULL)//未找到第i-1个结点,即i超出了[1..n]136 return 0;137 else//找到第i-1个结点p138 {139 q=p->next;//q指向要删除的结点140 p->next=q->next;//从单链表中删除q结点141 e=q->data;142 delete q;//释放q结点143 return 1;144 }145 }146 void DestoryList(LinkList &L)147 {148 //销毁单链表149 LinkList p;150 while(L)151 {152 p=L;153 L=L->next;154 delete p;155 }156 L=NULL;157 }
运行结果如下:
转载地址:http://ipjaa.baihongyu.com/