线性表之基于链表的实现
来源:互联网 发布:淘宝培训公司靠谱吗 编辑:程序博客网 时间:2024/05/18 03:54
欢迎关注,大家共同学习!
上一篇介绍了线性表的顺序存储结构和基于数组的实现,这篇介绍线性表的链式存储结构。
链式存储:用一组任意的存储单元存储线性表中的元素;
特点:
(1)存储单元可以是连续的,也可以是零散的;
(2)链表中结点的物理顺序和逻辑顺序不一定相同。
由于存储单元不一定是连续的,为了正确的表示结点之间的逻辑关系,每个结点除了存储数据信息外,还需要存储结点的直接后继结点的地址,我们称之为链或指针。
1、结点的定义:
typedef struct Lnode{ ElemType data; struct Lnode *next;}LNode;
2、初始化
int LinkList_Init(LNode *head){ head->data=0; head->next=NULL; return OK;}
3、表的插入操作
int LinkList_Insert(LNode *head,int i,ElemType e){ int flag=0; LNode *p,*pre,*q; pre=head; p=head->next; flag++; while(flag<i) { pre=p; p=p->next; flag++; } q=(LNode *)malloc(sizeof(LNode)); q->data=e; pre->next=q; q->next=p; return OK;}
4、表的删除操作
int LinkList_Delete(LNode *head,int i,ElemType *x){ int flag=0; LNode *pre,*p; pre=head; p=head->next; flag++; while(flag<i) { pre=p; p=p->next; flag++; } *x=p->data; pre->next=p->next; return OK;}
5、获取表的长度
int LinkList_getLength(LNode *head){ int counter=0; LNode *p; p=head; while(!p) { counter++; p=p->next; } return counter;}
6、获取表尾元素
int LinkList_getLastData(LNode *head){ ElemType temp; LNode *p; p=head; while(p->next) { p=p->next; } temp=p->data; return temp;}
7、打印元素
int LinkList_print(LNode *head){ LNode *p; p=head->next; cout<<"打印结果:"<<endl; while(p) { cout<<p->data<<endl; p=p->next; } return OK;}
关于链式存储结构的线性表结构的定义和全部操作就是上述这些,最后给出全部测试代码:
#include <iostream>#include<malloc.h>#define OK 1#define ERROR -1typedef int ElemType;using namespace std;//typedef struct Lnode{ ElemType data; struct Lnode *next;}LNode;//int LinkList_Init(LNode *head){ head->data=0; head->next=NULL; return OK;}//int LinkList_getLength(LNode *head){ int counter=0; LNode *p; p=head; while(!p) { counter++; p=p->next; } return counter;}//insertint LinkList_Insert(LNode *head,int i,ElemType e){ int flag=0; LNode *p,*pre,*q; pre=head; p=head->next; flag++; while(flag<i) { pre=p; p=p->next; flag++; } q=(LNode *)malloc(sizeof(LNode)); q->data=e; pre->next=q; q->next=p; return OK;}//int LinkList_Delete(LNode *head,int i,ElemType *x){ int flag=0; LNode *pre,*p; pre=head; p=head->next; flag++; while(flag<i) { pre=p; p=p->next; flag++; } *x=p->data; pre->next=p->next; return OK;}//int LinkList_getLastData(LNode *head){ ElemType temp; LNode *p; p=head; while(p->next) { p=p->next; } temp=p->data; return temp;}int LinkList_print(LNode *head){ LNode *p; p=head->next; cout<<"打印结果:"<<endl; while(p) { cout<<p->data<<endl; p=p->next; } return OK;}int main(){ LNode *head; ElemType x_delete; head=(LNode *)malloc(sizeof(LNode)); LinkList_Init(head); for(int i=0;i<10;i++) LinkList_Insert(head,i+1,i); LinkList_print(head); LinkList_Delete(head,5,&x_delete); cout<<"删除的元素:"<<x_delete<<endl; cout<<"获得表尾元素:"<<LinkList_getLastData(head)<<endl; cout<<"打印操作后的元素:"<<endl; LinkList_print(head); return 0;}
阅读全文
1 0
- 线性表之基于数组的实现
- 线性表之基于链表的实现
- 基于数组对线性表的实现
- 线性表的基本操作实现(基于链表)
- 线性结构总结(1)-基于链表的实现
- 基于数组和基于链表线性表C++实现
- 《数据结构之线性篇》-线性表的C++实现
- 基于数组的顺序线性表的实现
- 典型数据结构:线性表(基于数组的实现)
- 基于数组实现顺序存储的线性表
- 基于利用指针对线性表的实现(单链表)
- 线性表之顺序表的实现
- 线性表之单链表的c++实现
- 线性表综合实验之静态链表的实现
- 基于顺序表实现线性表
- JAVA 实现线性表之链表
- 线性表的基本操作实现(基于链表,有头结点)
- 线性表的实现
- 滑块
- 海思--Hi3516aMpp开发环境配置
- 变量和表达式
- QTcpSocket类和QTcpServer类
- Unity使用C#不失真修改图片的分辨率
- 线性表之基于链表的实现
- 扉页
- Oracle分组统计查询-分组查询
- C/C++ 数组传参原理
- 编译通过,可运行时找不到类,提示 classLink not found 之类的错误
- 机器学习实战代码详解(11)使用Apriori算法进行关联分析
- 前端基础小案例:纯css制作旋转披萨
- 随便写写
- java9新特性-Process 进程 API