线性表之链式表基本操作
来源:互联网 发布:笔记本怎么用梯子 知乎 编辑:程序博客网 时间:2024/05/21 10:43
LinkList.h
#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDED//单链表的存储结构typedef char ElemType;typedef struct LNode{ ElemType date;//存放元素值 struct LNode * next;//指向后继节点}LinkList;//双链表的存储结构typedef struct DNode{ ElemType date;//存放元素值 struct DNode *prior;//指向前驱节点 struct NNode *next;//指向后继节点}DLinkList;#endif // LINKLIST_H_INCLUDEDmain.cpp
#include <iostream>#include <stdio.h>#include <stdlib.h>#include "LinkList.h"using namespace std;//头插法建表void CreateListF(LinkList *&L,ElemType a[],int n){ LinkList *s; int i; L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; for(i=0;i<n;i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->date=a[i]; s->next=L->next; L->next=s; }}//尾插法建表void CreateListR(LinkList *&L,ElemType 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->date=a[i]; r->next=s; r=s; } r->next=NULL;}//初始化线性表void InitList(LinkList *&L){ L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL;}//销毁线性表void DestroyList(LinkList *&L){ LinkList * pre=L,*p=L->next; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre);}//判断线性表是否为空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) { printf("%c",p->date); p=p->next; } printf("\n");}//求线性表中某个元素的值bool GetElem(LinkList *L,int i,ElemType &e){ int j=0; LinkList *p=L; while(j<i&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { e=p->date; return true; }}//按元素值查找int LocateElem(LinkList *L,ElemType e){ int j=0; LinkList *p=L->next; while(p!=NULL&&p->date!=e) { p=p->next; j++; } if(p==NULL) return 0; else { return j; }}//插入数据元素bool ListInsert(LinkList *&L,int i,ElemType e){ int j=0; LinkList *s,*p=L; while(j<i-1&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { s=(LinkList*)malloc(sizeof(LinkList)); s->date=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->date; p->next=q->next; free(q); return true; }}int main(){LinkList *h;ElemType e;printf("单链表的基本运算如下:\n");printf(" (1)初始化单链表h\n");InitList(h);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(h,1,'a');ListInsert(h,2,'b');ListInsert(h,3,'c');ListInsert(h,4,'d');ListInsert(h,5,'e');printf(" (3)输出单链表h:");DispList(h);printf(" (4)单链表h长度=%d\n",ListLength(h));printf(" (5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));GetElem(h,3,e);printf(" (6)单链表h的第3个元素=%c\n",e);printf(" (7)元素a的位置=%d\n",LocateElem(h,'a'));printf(" (8)在第4个元素位置上插入f元素\n");ListInsert(h,4,'f');printf(" (9)输出单链表h:");DispList(h);printf(" (10)删除h的第3个元素\n"); ListDelete(h,3,e);printf(" (11)输出单链表h:");DispList(h);printf(" (12)释放单链表h\n");DestroyList(h);return 0;}运行结果:
0 0
- 线性表之链式表基本操作
- 数据结构-链式线性表基本操作实现
- 线性表的链式存储(单链表)的基本操作
- 链式结构实现线性表的基本操作
- 线性表的链式存储与基本操作
- 链式线性表的操作
- 线性表的链式操作
- 线性表之链式结构
- 线性表之链式表示
- 线性表之链式存储
- 数据结构之链式线性表
- 线性表之顺序表基本操作
- 线性表之双链表基本操作
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 线性表的顺序和链式存储表示及基本操作的实验
- [C++]数据结构实验03:链式结构线性表的基本操作
- [C++]数据结构:线性表的公式化描述和链式描述的结构特点与基本操作
- LintCode 17-子集 JAVA
- http协议详解
- Linux系统启动那些事—基于Linux 3.10内核
- 1015: [JSOI2008]星球大战starwar
- (转)设计模式读书笔记-----简单工厂模式
- 线性表之链式表基本操作
- poj 2965 枚举+DFS
- QQ 空间 上传 图片 ,默认图 很大, 能不能自动默认 是 小图。
- CSS的块级元素和内联元素区别
- python 3.5.0 installation fails on ubuntu 14.04
- 应用服务器tomcat
- Python的Radom模块
- 修改jupyter notebook默认工作目录
- LintCode Binary Tree Longest Consecutive Sequence II