单链表--数据结构实验
2016-09-28 17:58
351 查看
数据结构实验--单链表
/*实现顺序表的各种基本运算;并在此基础上设计一个主程序,完成如下功能:
(1) 初始化顺序表L(元素类型为char型)
(2) 依次采用尾插法插入a, b, c, d, e元素
(3) 输出顺序表L
(4) 输出顺序表L的长度
(5) 判断顺序表L是否为空
(6) 输出顺序表L的第3个元素
(7) 输出元素'a' 的位置
(8) 在第4个元素位置上插入'f'元素
(9) 输出顺序表L
(10) 删除顺序表L的第3个元素
(11) 输出顺序表
(12) 释放顺序表
*/
/*实现顺序表的各种基本运算;并在此基础上设计一个主程序,完成如下功能:
(1) 初始化顺序表L(元素类型为char型)
(2) 依次采用尾插法插入a, b, c, d, e元素
(3) 输出顺序表L
(4) 输出顺序表L的长度
(5) 判断顺序表L是否为空
(6) 输出顺序表L的第3个元素
(7) 输出元素'a' 的位置
(8) 在第4个元素位置上插入'f'元素
(9) 输出顺序表L
(10) 删除顺序表L的第3个元素
(11) 输出顺序表
(12) 释放顺序表
*/
#include <iostream> #include <stdlib.h> using namespace std; typedef char ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LinkList; void InitList(LinkList *&L){ //初始化线性表 L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL; } void CreateListR(LinkList *&L,ElemType a[],int n){ //尾插法插入元素 LinkList *s,*r; int i; 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; } bool ListEmpty(LinkList *L){ //判断是否为空表 return(L->next==NULL); } int ListLength(LinkList *L){ //求单链表长度 int n=0; LinkList *p=L; while(p->next!=NULL){ n++; p=p->next; } return(n); } void DispList(LinkList *L){ //输出单链表元素 LinkList *p = L->next; while(p!=NULL){ cout<<p->data<<" "; p=p->next; } cout<<endl; } bool GetElem(LinkList *L,int i,ElemType &e){ //查找第i个节点的元素 int j=0; LinkList * p = L; while(j<i&&p!=NULL){ j++; p=p->next; } if(p==NULL) return false; else{ e=p->data; return true; } } int LocateList(LinkList *L,ElemType 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(i); } bool ListInsert(LinkList *&L,int i,ElemType 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,ElemType &e){ //删除数组元素 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; e=q->data; p->next=q->next; free(q); return true; } } void DestroryList(LinkList *&L){ //销毁单链表 LinkList *pre=L,*p=L->next; while(p!=NULL){ free(pre); pre=p; p=pre->next; } free(pre); } int main(){ LinkList *L; ElemType x; char a[]={'a','b','c','d','e'}; InitList(L); CreateListR(L,a,5); cout<<"Display1: "; DispList(L); cout<<"Length1: "<<ListLength(L)<<endl; if(!ListEmpty(L)) cout<<"Not Empty"<<endl; else cout<<"Empty"<<endl; GetElem(L,3,x); cout<<"The third is "<<x<<endl; cout<<"'a' is in "<<LocateList(L,'a')<<endl; ListInsert(L,4,'f'); cout<<"Display2: "; DispList(L); ListDelete(L,3,x); cout<<"Display3: "; DispList(L); DestroryList(L); return 0; }
相关文章推荐
- 数据结构实验之链表五:单链表的拆分
- sdut.acm2012级《程序设计基础Ⅱ)》_链表 数据结构实验之链表四:有序链表的归并
- 寒假第二天--线性表-- 数据结构实验之链表四:有序链表的归并
- 数据结构实验之链表
- 数据结构实验之链表三:链表的逆置
- 数据结构实验之链表一:顺序建立链表
- 数据结构实验之链表一:顺序建立链表
- 寒假第二天--线性表--数据结构实验之链表七:单链表中重复元素的删除
- 寒假第二天--线性表-- 数据结构实验之链表三:链表的逆置
- 数据结构实验1---约瑟夫环(“链表”实现)
- 2121 数据结构实验之链表六:有序链表的建立 【纯插排】
- sdut.acm2012级《程序设计基础Ⅱ)》_链表 数据结构实验之链表二:逆序建立链表
- 寒假第二天--线性表-- 数据结构实验之链表二:逆序建立链表
- 数据结构实验课程----实验二(利用链表实现学生健康系统)
- sdut.acm 2012级《程序设计基础Ⅱ)》_链表 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验一--单链表的基本操作的算法
- 2119 数据结构实验之链表四:有序链表的归并
- 数据结构实验之链表三:链表的逆置
- 寒假第二天--线性表--数据结构实验之链表一:顺序建立链表
- 寒假第二天--线性表-- 数据结构实验之链表五:单链表的拆分