博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之线性表
阅读量:2441 次
发布时间:2019-05-10

本文共 3709 字,大约阅读时间需要 12 分钟。

开始考研复习数据结构了,准备把《数据结构》严蔚敏版中所有的数据结构全部实现一遍,今天是线性表.

基本上和课本上的类c语言差不多。(代码注释的很详细了哈哈)

Mycode:

#include 
#include
#include
#include
#include
using namespace std;#define List_Init_Size 100 //线性表存储空间的初始分配量#define ListIncrement 10 //线性表存储空间的分配增量typedef struct{ int *elem; //存储空间基址 int length; //当前表长 int listsize; //当前分配的存储大小}SqList;int InitList(SqList &L){ //初始化一个空的线性表 L.elem = (int *)malloc(List_Init_Size * sizeof(int)); //初始分配存储空间 if (!L.elem) exit(-2); //分配失败 L.length = 0; L.listsize = List_Init_Size; return 1;}int DestroyList(SqList &L){ //销毁线性表 free(L.elem); //直接释放掉这段空间 return 1;}int ListEmpty(SqList L){ //判断表是否为空 if (L.length == 0) return 1; return 0;}/* 个人感觉这个实在没啥用int ListLength(SqList L){ //返回表长 return L.length;}*/int ListClear(SqList &L){ //清空线性表 for(int i = 0; i < L.length; i++) L.elem[i] = 0; L.length = 0; return 1;}int GetElem(SqList L, int i, int &e){ //找到第i个元素,并用e返回 if (i < 0 || i > L.length) return 0; //i不合法 e = L.elem[i - 1]; return 1;}int LocateElem(SqList L, int e){ //返回线性表中第一个和e相等的元素 for(int i = 0; i < L.length; i++) if (L.elem[i] == e) return i + 1; return 0;}int PriorElem(SqList L, int cur, int &pre){ //若cur是L中的元素,且不是第一个,则返回它的前驱 for(int i = 0; i < L.length; i++){ if (L.elem[i] == cur){ if (i == 0){ return 0; //不能是第一个元素 } pre = L.elem[i - 1]; return 1; } } return 0; //cur不在线性表中,找不到前驱}int NextElem(SqList L, int cur, int &next){ //若cur是L中的元素,且不是最后一个,则返回它的后继 for(int i = 0; i < L.length; i++){ if (L.elem[i] == cur){ if (i == L.length - 1){ return 0; //不能是最后一个元素 } next = L.elem[i + 1]; return 1; } } return 0; //cur不是线性表中的元素}int ListInsert(SqList &L, int i, int e){ //在第i个位置之前插入新的元素e if (i < 1 || i > L.length + 1) return 0; //i不合法 if (L.length >= L.listsize){ //当前空间已满,增加分配 L.elem = (int *)realloc(L.elem, (L.listsize + ListIncrement) * sizeof(int)); L.length += ListIncrement; } int *q = &(L.elem[i-1]); int *p ; for(p = &(L.elem[L.length - 1]); p >= q; p--) *(p+1) = *p; //插入的位置及以后的元素全部后移1位 *q = e; L.length += 1; //插入后表长+1 return 1;}int ListDelete(SqList &L, int i, int &e){ //删除第i位元素,并用e返回 if (i < 1 || i > L.length) return 0; int *p = &(L.elem[i - 1]); e = *p; int *q = &(L.elem[L.length - 1]); for(++p; p <= q; p++){ *(p - 1) = *p; } L.length--; return 1;}int main(){ SqList s; printf("开始初始化线性表s\n"); InitList(s); printf("空表长度: %d, 分配存储大小: %d\n",s.length,s.listsize); printf("---------------------------------\n"); printf("开始进行插入操作\n"); for(int i = 1; i <= 10; i++){ printf("线性表第%d个元素插入%d\n",i,i); ListInsert(s, i, i); } printf("---------------------------------\n"); if (ListEmpty(s)) printf("线性表为空\n"); else printf("此时线性表的表长为: %d\n", s.length); int e; GetElem(s, 5, e); printf("第5个元素的值是: %d\n", e); printf("---------------------------------\n"); PriorElem(s, 7, e); printf("第7个元素的前驱是: %d\n", e); NextElem(s, 7, e); printf("第7个元素的后继是: %d\n", e); printf("---------------------------------\n"); ListDelete(s, 1, e); printf("删除1号元素后的表长: %d\n", s.length); for(int i = 0; i < s.length; i++){ printf("第%d个元素为:%d\n", i + 1, s.elem[i]); } printf("---------------------------------\n"); ListClear(s); printf("清空后s的表长: %d\n", s.length); DestroyList(s); return 0;}

运行结果:

开始初始化线性表s空表长度: 0, 分配存储大小: 100---------------------------------开始进行插入操作线性表第1个元素插入1线性表第2个元素插入2线性表第3个元素插入3线性表第4个元素插入4线性表第5个元素插入5线性表第6个元素插入6线性表第7个元素插入7线性表第8个元素插入8线性表第9个元素插入9线性表第10个元素插入10---------------------------------此时线性表的表长为: 10第5个元素的值是: 5---------------------------------第7个元素的前驱是: 6第7个元素的后继是: 8---------------------------------删除1号元素后的表长: 9第1个元素为:2第2个元素为:3第3个元素为:4第4个元素为:5第5个元素为:6第6个元素为:7第7个元素为:8第8个元素为:9第9个元素为:10---------------------------------清空后s的表长: 0Hit any key to close this window...

转载地址:http://cefqb.baihongyu.com/

你可能感兴趣的文章
计算机加锁 把U盘变成打开电脑的钥匙(转)
查看>>
C#开发的两个基本编程原则的深入讨论(转)
查看>>
Fedora Core 4 基础教程 (上传完毕)(转)
查看>>
删除MSSQL危险存储过程的代码(转)
查看>>
红旗软件:树立国际的Linux品牌(转)
查看>>
Linux学习要点(转)
查看>>
影响mysqld安全的几个选项(转)
查看>>
最新版本Linux Flash 9 Beta开放发布(转)
查看>>
mysql事务处理(转)
查看>>
Fedora 显示设备配置工具介绍(转)
查看>>
FREEBSD 升级及优化全攻略(转)
查看>>
系统移民须知:Linux操作系统安装要点(转)
查看>>
在redhat系统中使用LVM(转)
查看>>
Gentoo 2005.1 完整的USE参数清单中文详解(转)
查看>>
如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 (5)
查看>>
手机最新触控技术
查看>>
Kubuntu 项目遭遇困难(转)
查看>>
kubuntu使用日记之 eva的配置使用(转)
查看>>
unix下几个有用的小shell脚本(转)
查看>>
QQ病毒的系列处理办法(转)
查看>>