线性表的存储结构(链式存储结构)
来源:互联网 发布:淘宝手机卡怎么领取 编辑:程序博客网 时间:2024/05/18 03:24
距上一次写线性表的顺序存储结构已经有一段时间了(详戳http://blog.csdn.net/u010429311/article/details/50933932),这次主要接着来实现线性表的链式存储结构,即我们通常所说的链表。
链表可以用一组任意的存储单元存储线性表的数据元素,而存储数据的这组存储单元可以是连续的,也可以是不连续的。具体看一下图解:
在链表中,我们也可以实现链表的创建、插入、删除等操作。其原理如下图:
以下是具体的实现代码:
定义结构体:
#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct LNode{ ElemType data; //结点的数据 struct LNode *next; //指向下一结点的指针} LNode, *LinkList;
创建链表:
/**逆序往链表里插入n个元素*/Status createList(LinkList &L, int n) { LinkList p; L = (LinkList) malloc(sizeof(LNode)); //申请结点空间 L->next = NULL; //建立带头结点的链表 for (; n > 0; n--) { p = (LinkList) malloc(sizeof(LNode)); //生成新结点 scanf("%d", &p->data); //输入结点的元素 p->next = L->next; //插入到表头 L->next = p; } return OK;}
插入元素:
/**往链表的第i个位置插入元素*/Status listInsert(LinkList &L, int i, ElemType e) { LinkList p, s; p = L; int j = 0; while (p && j < i - 1) { //寻找第i-1个结点 p = p->next; j++; } if (!p || j > i - 1) return ERROR; s = (LinkList) malloc(sizeof(LNode)); //申请新结点 s->data = e; //插入新的结点 s->next = p->next; p->next = s; return OK;}
删除元素:
Status listDelete(LinkList &L, int i, ElemType &e) { LinkList p, q; p = L; int j = 0; while (p->next && j < i - 1) { //寻找第i个结点 p = p->next; j++; } if (!p->next || j > i - 1) return ERROR; q = p->next; //删除结点 p->next = q->next; e = q->data; free(q); //释放被删除结点的空间 return OK;}
遍历链表:
Status loadList(LinkList &L) { if (L->next == NULL) { return ERROR; } LinkList p; p = L->next; //注意,头结点没有存放数值,应从L->next开始遍历 while(p) { //遍历结点,输出数值 printf("%d ", p->data); p = p->next; } printf("\n"); return OK;}
2 0
- 线性表的存储结构(链式存储结构)
- 线性表的顺序存储结构与链式存储结构
- 线性表-链式存储结构
- 链式存储结构线性表
- 线性表的链式存储结构
- 链式存储结构的线性表
- 线性表的链式存储结构
- 【数据结构】线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 【二】线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构(三)
- 【数据结构】-线性表的链式存储结构
- 线性表的链式存储结构
- H.264 RTP PAYLOAD 格式
- WebView下拉刷新解决办法
- android JNI基础篇(一)
- startActivityForResult,startActivity,setResult用法和详解
- spring中用到哪些设计模式
- 线性表的存储结构(链式存储结构)
- PowerShell 5.0和跨平台PowerShell支持class类编程
- c++第二次作业2
- ARM exception
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
- Java单链表基本操作(七)--排序
- [LeetCode 326] Power of Three
- .net 单元测试
- java多线程的同步和死锁