链表的建立以及各种基本操作
来源:互联网 发布:python 定义一个list 编辑:程序博客网 时间:2024/05/01 09:18
#include <iostream>using namespace std;#include <stdio.h>#include<malloc.h>#define MaxSize 50typedef char ElemType;typedef struct LNode //定义单链表节点类型{ElemType data; //存放元素值 LNode * next; //指向后继节点}LinkList;void InitList(LinkList *&L) //初始化线性表,创建头节点,使其next域置为空{ L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL;}bool ListEmpty(LinkList *L) //判断线性表是否为空,若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) //输出线性表,逐一扫描链表中的每一个数据节点,并显示各节点的data值{ LinkList *p=L->next; while(p!=NULL) { printf("%c",p->data); p=p->next; } printf("\n");}void CreatListR(LinkList *&L,ElemType a[],int n) //尾插法,增加一个指针r,使其始终指向链表的尾节点,并将其next域置为空{ 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;}bool GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据元素的值,从链表头开始找第i个节点,若存在第i个数据节点,则将其{ int j=0; //值赋给e LinkList *p=L; while(j<i&&p!=NULL) { j++; p=p->next; } if(p==NULL) { return false; } else { e=p->data; return true; }}int LocateElem(LinkList *L,ElemType e) //按元素查找,从链表头开始找第一个值与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) //插入数据元素 从链表中找到第i-1个节点*P,若存在这样的节点,将其值为e的节点*S插入到*p的后面{ 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) //删除元素 从链表中找到第i-1个节点,若存在这个节点,且存在后继节点*q,则删除*q节点,返回true{ 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 DestroyList(LinkList *&L) //销毁线性表 释放链表L占用的内存空间,即逐一释放全部节点的空间{ LinkList * pre=L,* p=L->next; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre);}void main() //主函数,主要为各个函数的调用{ LinkList *L; ElemType e,a[5]={'a','b','c','d','e'}; printf("1.初始化表L\n"); InitList(L); printf("2.采用尾插法插入a,b,c,d,e元素\n"); CreatListR(L,&a[0],5); printf("3.输出链表L :"); DispList(L); printf("4.链表的长度=%d\n",ListLength(L)); printf("5.链表为%s\n",(ListEmpty(L)?"空":"非空")); GetElem(L,3,e); printf("6.链表的第三个元素=%c\n",e); printf("7.元素a的位置=%d\n",LocateElem(L,'a')); printf("8,在第四个元素位置上插入元素f\n"); ListInsert(L,4,'f'); printf("9.输出链表:"); DispList(L); printf("10.删除第三个元素\n"); ListDelete(L,3,e); printf("11.输出链表:"); DispList(L); printf("12.释放链表:\n"); DestroyList(L);}
0 0
- 链表的建立以及各种基本操作
- 线性表的建立以及基本操作
- 双向链表的建立及基本操作
- 双向链表的建立与基本操作
- 剑指offer 链表的建立等基本操作
- 广义表的建立与基本操作
- 广义表的建立与基本操作
- 对链表的基本实现和各种操作
- 顺序表的各种操作以及合并
- 链表建立、删除、插入基本操作
- 我对链表的理解以及基本的操作
- 静态链表的创建以及基本操作
- 双链表以及循环链表的基本操作
- 动态内存分配以及链表的基本操作
- 【mysql】表的创建以及基本操作
- MySql数据库的基本操作-表的建立/查询
- 把这个学会,zencart的数据库操作,以及各种函数的调用基本会了
- 9. 广义表的建立与基本操作
- Android 动画框架详解,第 1 部分
- 最长单调递增子序列
- 11.2.0的参数OPTIMIZER_FEATURES_ENABLE会话层与语句层上设置区别;
- 人生哲理枕边书——你应该知道的165个人生哲理
- ELF与BIN文件区别
- 链表的建立以及各种基本操作
- 小编跟大家一起来研究下html中header的内容
- @synthesize obj=_obj的意义详解 @property和@synthesize
- 你说的话 在我心中生了根
- 信息学习16
- 善待自己:改变命运的N个人生哲理
- 在你的灵魂里舞尽我的美丽
- android 工具类 DateUtil
- Calendar 日期工具