顺序表的各种基本运算
来源:互联网 发布:bms读取软件 编辑:程序博客网 时间:2024/05/17 09:45
顺序表的各种基本运算
欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽我全力改正错误回答问题。在此谢谢大家。下面开始正式内容
順序表是在計算機內存中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。维基百科-顺序表
实验环境
- 语言c/c++
- 编译器devc++5.11
实验内容与要求
- 初始化顺序表;
- 依次插入a,b,c,d,e元素;
- 输出顺序表L;
- 输出顺序表L的长度;
- 判断顺序表L是否为空;
- 输出顺序表L指定位置元素;
- 输出顺序表L指定元素的位置;
- 插入元素;
- 输出顺序表L;
- 删除L元素;
- 释放顺序表。
目录
- 顺序表的各种基本运算
- 实验环境
- 实验内容与要求
- 目录
- 实验解析
- 结构说明
- 定义说明
- 函数说明
- 顺序表函数
- 初始化顺序表
- 判空
- 获取长度
- 打印
- 插入
- 删除
- 查询
- 释放
- 主函数
- 顺序表函数
- 结果展示
- 附录
- 相关资料
- 源代码
实验解析
结构说明
由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。
在此,我们利用C语言的结构体类型定义顺序表:
#define LIST_INIT_SIZE 100 // 线性表初始存储空间分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct{ ElemType * elem; //线性表存储空间基址 int length; //当前线性表长度 int listsize; //当前分配的线性表存储空间大小 //(以sizeof(ElemType)为单位)}SqList;
定义说明
#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef char ElemType;
定义常用常量,类型别称
函数说明
顺序表函数
初始化顺序表
Status InitList_Sq(SqList &L){ L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //构造一个空的顺序表L if (! L.elem) exit(0); //存储分配失败 L. length=0; //空表长度为0 L.Listsize=LIST_INIT_SIZE; //初始存储容量 return OK;}//InitList_Sq
给传入顺序表分配空间 ,成功返回1,失败则结束程序。 使用顺表一定要先初始化再使用顺序表
判空
Status EmptyList_Sq ( SqList L) { if(L.length==0) return TRUE; else return FALSE;}
判断传入顺序表L是否为空,空返回1,不空为0
获取长度
Status LengthList_Sq ( SqList L) { return L.length;}
返回传入顺序表长度
打印
Status DisplayList_Sq ( SqList L){ //打印表中元素 int i ; for(i=0;i<L.length;i++) printf("%c" , L.elem[i]); printf("\n"); return OK;}
打印传入顺序表中的值到屏幕
插入
Status ListInsert_Sq(SqList &L, int i , ElemType e) { //在顺序表L中第i个位置之后插入新的元素e, // i的合法值为1≤i≤L.length+1,当i =L.length+1时 // e插在表尾 if (i<1|| i>L.length+1) return ERROR; // i值不合法 if (L.length>=L.Listsize) return ERROR; //顺序表已满 for (int j=L.length-1 ; j>= i-1; --j) L.elem[j+1] =L.elem[j]; //插入位置及之后的元素后移一个位置 L.elem[i-1] =e; //插入e L.length++; //表长增1*/ return OK;}//ListInsert_Sq
将元素e插入顺序表L的第i位,成功返回1,失败返回0
删除
Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i个元素,并用e返回其值 // i的合法值为 1≤i≤L.length if ((i<1)||(i>L.length)) return ERROR; // i值不合法或表空 e = L.elem[i-1] ; // 被删除元素的值赋给e for (int j= i; j<= L.length-1; ++j) L.elem[j-1]= L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 return OK;}//ListDelete_Sq
删除顺序表L第i个元素并保存该元素到变量e,成功返回1,失败返回0
查询
Status GetElemList_Sq ( SqList L,int i,ElemType &e) { if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK;}
获取顺序表L的第i个元素,存到变量e中,成功返回1,失败返回0
Status LocateElemList_Sq( SqList L,ElemType e) { int i=0; while(i<L.length&&L.elem[i]!=e) i++; if(i>=L.length) return 0; return i+1;}
获取顺序表L中e元素第一次出现的位置,成功返回元素位置,失败返回0
释放
Status DestroyList_Sq ( SqList &L) { if (!L.elem) return ERROR; free (L.elem); L.elem = NULL; L.length = 0; L.Listsize = 0; return OK;}// DestroyList_Sq
释放传入的顺序表,成功返回1,失败返回0
主函数
int main(){ SqList L; ElemType e; printf("(1)初始化顺序表\n"); InitList_Sq(L); printf("(2)依次插入a,b,c,d,e元素\n"); ListInsert_Sq(L,1,'a'); ListInsert_Sq(L,2,'b'); ListInsert_Sq(L,3,'c'); ListInsert_Sq(L,4,'d'); ListInsert_Sq(L,5,'e'); ListInsert_Sq(L,3,'q'); ListInsert_Sq(L,1,'q'); printf("(3)输出顺序表:"); DisplayList_Sq(L); printf("(4)顺序表的长度=%d\n",LengthList_Sq(L)); printf("(5)顺序表为%s\n",(EmptyList_Sq(L)?"空":"非空")); GetElemList_Sq(L,3,e); printf("(6)顺序表的第三个元素是%c\n",e); printf("(7)元素a的位置=%d\n",LocateElemList_Sq(L,'a')); printf("(8)在第四个元素插入元素f\n"); ListInsert_Sq(L,4,'f'); printf("(9)输出顺序表:"); DisplayList_Sq(L); printf("(10)删除第三个元素\n"); ListDelete_Sq(L,3,e); printf("(11)f元素第一次出现的位置:"); printf("%d\n",LocateElemList_Sq(L,'f')); printf("(12)输出顺序表:"); DisplayList_Sq(L); printf("(13)释放顺序表\n"); DestroyList_Sq(L);}
结果展示
附录
相关资料
- 维基百科-顺序表
源代码
#include<stdio.h> //EOF,NULL#include<malloc.h> //malloc()#include<process.h> //exit()#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef char ElemType;#define LIST_INIT_SIZE 100 // 线性表初始存储空间分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct{ ElemType * elem; //线性表存储空间基址 int length; //当前线性表长度 int Listsize; //当前分配的线性表存储空间大小 //(以sizeof(ElemType)为单位)}SqList;Status InitList_Sq(SqList &L){ L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //构造一个空的顺序表L if (! L.elem) exit(0); //存储分配失败 L. length=0; //空表长度为0 L.Listsize=LIST_INIT_SIZE; //初始存储容量 return OK;}//InitList_Sq Status DestroyList_Sq ( SqList &L) { if (!L.elem) return ERROR; free (L.elem); L.elem = NULL; L.length = 0; L.Listsize = 0; return OK;}// DestroyList_Sq Status EmptyList_Sq ( SqList L) { if(L.length==0) return TRUE; else return FALSE;}Status LengthList_Sq ( SqList L) { return L.length;}Status DisplayList_Sq ( SqList L){ //打印表中元素 int i ; for(i=0;i<L.length;i++) printf("%c" , L.elem[i]); printf("\n"); return OK;}Status ListInsert_Sq(SqList &L, int i , ElemType e) { //在顺序表L中第i个位置之后插入新的元素e, // i的合法值为1≤i≤L.length+1,当i =L.length+1时 // e插在表尾 if (i<1|| i>L.length+1) return ERROR; // i值不合法 if (L.length>=L.Listsize) return ERROR; //顺序表已满 for (int j=L.length-1 ; j>= i-1; --j) L.elem[j+1] =L.elem[j]; //插入位置及之后的元素后移一个位置 L.elem[i-1] =e; //插入e L.length++; //表长增1*/ return OK;}//ListInsert_SqStatus ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i个元素,并用e返回其值 // i的合法值为 1≤i≤L.length if ((i<1)||(i>L.length)) return ERROR; // i值不合法或表空 e = L.elem[i-1] ; // 被删除元素的值赋给e for (int j= i; j<= L.length-1; ++j) L.elem[j-1]= L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 return OK;}//ListDelete_SqStatus GetElemList_Sq ( SqList L,int i,ElemType &e) { if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK;}Status LocateElemList_Sq( SqList L,ElemType e) { int i=0; while(i<L.length&&L.elem[i]!=e) i++; if(i>=L.length) return 0; return i+1;}int main(){ SqList L; ElemType e; printf("(1)初始化顺序表\n"); InitList_Sq(L); printf("(2)依次插入a,b,c,d,e元素\n"); ListInsert_Sq(L,1,'a'); ListInsert_Sq(L,2,'b'); ListInsert_Sq(L,3,'c'); ListInsert_Sq(L,4,'d'); ListInsert_Sq(L,5,'e'); ListInsert_Sq(L,3,'q'); ListInsert_Sq(L,1,'q'); printf("(3)输出顺序表:"); DisplayList_Sq(L); printf("(4)顺序表的长度=%d\n",LengthList_Sq(L)); printf("(5)顺序表为%s\n",(EmptyList_Sq(L)?"空":"非空")); GetElemList_Sq(L,3,e); printf("(6)顺序表的第三个元素是%c\n",e); printf("(7)元素a的位置=%d\n",LocateElemList_Sq(L,'a')); printf("(8)在第四个元素插入元素f\n"); ListInsert_Sq(L,4,'f'); printf("(9)输出顺序表:"); DisplayList_Sq(L); printf("(10)删除第三个元素\n"); ListDelete_Sq(L,3,e); printf("(11)f元素第一次出现的位置:"); printf("%d\n",LocateElemList_Sq(L,'f')); printf("(12)输出顺序表:"); DisplayList_Sq(L); printf("(13)释放顺序表\n"); DestroyList_Sq(L);}
阅读全文
1 0
- 顺序表的各种基本运算
- 顺序表各种基本运算的算法
- 顺序表的各种基本运算
- 实现顺序表各种基本运算的算法
- 编写一个程序,实现顺序表的各种基本运算
- 顺序环形队列的各种基本运算
- 数据结构 顺序串的各种基本运算
- 顺序栈各种基本运算的算法
- 顺序串各种基本运算的算法
- 顺序栈的各种基本运算
- 实现顺序表各种基本运算算法
- 顺序表的基本运算
- 顺序表的基本运算
- 顺序表的基本运算
- 顺序表的基本运算
- 顺序表的基本运算
- 顺序表的基本运算
- 顺序表的基本运算。
- HDU-3555 Bomb (数位dp 入门题)
- centos下配置apache用户及用户组权限
- 2017年11月最新Nagios4.3.4部署 邮件&音频告警 自定义监控脚本
- 日积月累的小技巧
- vSphere Web Client无法连接到一个或多个 vCenter Server 系统(5.5)
- 顺序表的各种基本运算
- 数据结构实验之图论六:村村通公路
- Qt之界面换肤【转】
- 安卓动画
- [Tips] 开发版常见问题集锦
- react实战--antd、react-router-dom v4 解决菜单和地址同步问题
- OpenStack 配置 Dashboard 仪表盘服务(Controller Node)
- JS获取URL中参数值(QueryString)的4种方法
- 【淘宝】图片放大 代码