DS之顺序表
来源:互联网 发布:php 生成唯一订单号 编辑:程序博客网 时间:2024/05/10 11:48
顺序表定义
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构或顺序映像通常被叫做顺序表。顺序表的特点为:以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。每一个数据元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比的常数。因此,只要确定了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。下面的图很好的显示了这种结构。
顺序表的数据元素的插入与删除的结构图:
顺序表的存储结构代码:
<span style="font-size:18px;">#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10typedef int ElemType;typedef struct{ElemType *elem;//存储空间基址int length;//当前长度int listsize;//当前分配的存储容量}SqList;//定义了一个结构体类型,并命名为</span>
顺序表的基本操作
0基本操作前的准备
<span style="font-size:18px;">#include <iostream>using namespace std;#include <malloc.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10typedef int ElemType;typedef int Status;typedef struct{ElemType *elem;//存储空间基址int length;//当前长度int listsize;//当前分配的存储容量}SqList;//定义了一个结构体类型,并命名为</span>
1构建一个空的顺序表
<span style="font-size:18px;">//1初始化顺序表Status InitList(SqList &L){ L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) {exit(OVERFLOW); } L.length=0; L.listsize=LIST_INIT_SIZE; return OK; }</span>
2判断顺序表是否为空
<span style="font-size:18px;">//2判断顺序表是否为空Status ListEmpty(SqList L){return L.length==0;}</span>
3求顺序表的长度
<span style="font-size:18px;">//3求顺序表的长度Status ListLength(SqList L){return L.length;}</span>
4销毁顺序表
<span style="font-size:18px;">//4销毁顺序表Status DestroyList(SqList &L){if(L.elem){free(L.elem);}L.elem=NULL;return OK;}</span>
5清空顺序表
<span style="font-size:18px;">Status ClearList(SqList &L){L.length=0;return OK;}</span>
6向顺序表插入数据元素
<span style="font-size:18px;">Status ListInsert(SqList &L,int i, ElemType e){if(i<1||i>L.length+1){return ERROR;}if (L.length>=L.listsize){ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT )*sizeof(ElemType)); if(!newbase){exit(OVERFLOW);} L.elem=newbase; L.listsize+=LISTINCREMENT;} ElemType *q=&(L.elem[i-1]); ElemType *p; for(p=&(L.elem[L.length-1]);p>=q;p--) { *(p+1)=*p; } *q=e; ++L.length; return OK;</span><span style="font-size:18px;">}</span>
7返回顺序表中的第i个元素
<span style="font-size:18px;">//7返回顺序表中的第i个元素Status GetElem(SqList L,int i,ElemType &e){if(i<1||i>L.length){return ERROR;}e=L.elem[i-1];return OK;}</span>
8删除顺序表的第i个数据元素
<span style="font-size:18px;">//8删除顺序表的第i个数据元素Status ListDelete(SqList &L,int i,ElemType &e){if(i<1||i>L.length){return ERROR;}e=L.elem[i-1];for(i=0;i<L.length;i++){L.elem[i-1]=L.elem[i];--L.length;}return OK;}</span>
1 0
- DS之顺序表
- DS之顺序表
- DS之顺序栈
- DS之顺序表实现乱序输入顺序输出
- DS之顺序表实现输入数据逆置
- DS之线性表
- DS之顺序表实现归并两个非递减线性表
- DS之顺序栈和链队实现回文判断
- DS笔记(2)顺序表与链表
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言DS线性表的顺序表示
- 自考之DS
- DS之何谓数据结构
- DS之算法概述
- DS之栈
- DS之单链表
- DS之链队
- DS之树
- DS之二叉树
- Choose Your Tools with Care
- C++ 文件读写
- android module 添加内容
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- Comment Only What the Code Cannot Say
- DS之顺序表
- 代码坏味道与启发--《代码整洁之道》总结
- 认识Linux
- Spark RDD:弹性分布式数据集
- SQL Server以windows验证登录之后,修改sa密码,不能用sa登录的解决方案
- B/S路漫漫总结(二)
- APUE笔记 线程
- JavaScript Date 对象 初始化的5种方法
- U盘是否挂载