数据结构 - 简单的单链表结构
2016-03-30 17:31
549 查看
编写一个程序exp2-2.cpp,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上完成如下功能:
(1)初始化单链表h;
(2)采用尾插法依次插入元素a,b,c,d,e;
(3)输出单链表h;
(4)输出单链表h长度;
(5)判断单链表h是否为空;
(6)输出单链表h的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入元素f;
(9)输出单链表h;
(10)删除h的第3个元素;
(11)输出单链表h;
(12)释放单链表h。
(1)初始化单链表h;
(2)采用尾插法依次插入元素a,b,c,d,e;
(3)输出单链表h;
(4)输出单链表h长度;
(5)判断单链表h是否为空;
(6)输出单链表h的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入元素f;
(9)输出单链表h;
(10)删除h的第3个元素;
(11)输出单链表h;
(12)释放单链表h。
#include <iostream> #include <cstdlib> using namespace std; struct LinkList { char data; struct LinkList * next; }; void InitList(LinkList *&);//初始化单链表 void CreateList(LinkList *&,char [],int);//尾插法插入单链表 void DispList(LinkList *);//输出单链表 int ListLength(LinkList *);//输出单链表长度 bool ListEmpty(LinkList *);//判断单链表是否为空 char GetElem(LinkList *,int);//输出单链表的第a个元素 int LocateElem(LinkList *,char);//输出某元素的位置 bool ListInsert(LinkList *&,int,char);//在某位置插入元素 bool ListDelete(LinkList *&,int);//删除某个元素 void DestroyList(LinkList *&);//释放单链表 int main() { char a[]="abcde"; cout<<"单链表的基本算法如下:"<<endl; LinkList *L; InitList(L); cout<<"(1)初始化单链表H"<<endl; CreateList(L,a,5); cout<<"(2)依次采用尾插法插入a,b,c,d,e元素"<<endl; cout<<"(3)输出单链表H:"; DispList(L); cout<<"(4)单链表H长度="<<ListLength(L)<<endl; cout<<"(5)单链表H为"<<(ListEmpty(L)?"":"非")<<"空"<<endl; cout<<"(6)单链表H的第3个元素="<<GetElem(L,3)<<endl; cout<<"(7)元素a的位置="<<LocateElem(L,'a')<<endl; cout<<"(8)在第4个元素位置上插入f元素"<<(ListInsert(L ,4,'f')?"...Success":"...Failed")<<endl; cout<<"(9)输出单链表H:"; DispList(L); cout<<"(10)删除单链表H的第3个元素"<<(ListDelete(L,3)?"...Success":"...Failed")<<endl; cout<<"(11)输出单链表H:"; DispList(L); cout<<"(12)释放单链表H"; DestroyList(L); } void InitList(LinkList *&L) { L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; } void CreateList(LinkList *&L,char a[],int n) { LinkList *s,*r; int i; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(i=0; i<n; i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } void DispList(LinkList *L) { LinkList *p=L->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; } int ListLength(LinkList *L) { int n=0; LinkList *p=L; while(p->next!=NULL) { n++; p=p->next; } return n; } bool ListEmpty(LinkList *L) { return(L->next==NULL); } char GetElem(LinkList *L,int i) { int j=0; LinkList *p=L; while(j<i && p!=NULL) { j++; p=p->next; } if(p==NULL) { return '!'; } else { return p->data; } } int LocateElem(LinkList *L,char e) { int i=1; LinkList *p=L->next; while(p!=NULL && p->data!=e) { p=p->next; i++; } if (p==NULL) { return 0; } else return 1; } bool ListInsert(LinkList *&L,int i,char e) { int j=0; LinkList *p=L,*s; while(j<i-1 && p!=NULL) { j++; p=p->next; } if (p==NULL) { return false; } else { s=(LinkList *)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return true; } } bool ListDelete(LinkList *&L,int i) { int j=0; LinkList *p=L,*q; while(j<i-1 && p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { q=p->next; if(q==NULL) return false; p->next=q->next; free(q); return true; } } void DestroyList(LinkList *&L) { LinkList *pre=L,*p=L->next; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre); }运行结果:
相关文章推荐
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- C语言实现单链表逆序与逆序输出实例
- C语言单链表常见操作汇总
- C数据结构之单链表详细示例分析
- C++中单链表的建立与基本操作
- 深入单链表的快速排序详解
- java实现单链表中是否有环的方法详解
- java实现单链表、双向链表
- Python单链表的简单实现方法
- Go语言单链表实现方法
- 结构之美:在单链表指定位置插入数据
- 《编程之美》3.4:没有头结点的单链表如何删除结点
- 结构之美:使用尾插法创建单链表
- 单链表实现
- 单链表的实现及其操作
- 判断单链表是否有环
- 单链表建环,无环链表变有环
- 用头插法实现单链表整表创建
- 单链表的删除某个元素的操作