博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性表的链式存储结构的实现及其应用(C/C++实现)
阅读量:6321 次
发布时间:2019-06-22

本文共 3963 字,大约阅读时间需要 13 分钟。

存档-----------

1 #include 
2 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/

你可能感兴趣的文章
LayUI之layer关闭刷新父界面
查看>>
动态代理
查看>>
分布式集群系统下的高可用session解决方案
查看>>
服务器部署raid5图解
查看>>
印度海得拉巴发生连环爆炸
查看>>
经典java转码程序,实现和 jdk\bin\native2ascii.exe 同样的功能
查看>>
警惕:移动应用App背后的安全危机!
查看>>
java
查看>>
python 异常
查看>>
拿什么来拯救你,电视!
查看>>
计算机网络改变了人们的娱乐方式
查看>>
django模板高级进阶
查看>>
我是一个硬盘
查看>>
块级元素与内联元素
查看>>
二次剩余Cipolla算法学习笔记
查看>>
String类的一些常用方法
查看>>
hdu 4122(RMQ)2011福州现场赛B题
查看>>
小组项目冲刺第四天的个人总结
查看>>
Mybatis入门
查看>>
2019.2.15 t2
查看>>