数据结构(C语言版)顺序表相关算法代码实现
这两天实现了一下顺序表的相关操作,包括顺序表初始化、创建、遍历、第i个元素前插入,删除第i个元素、查找元素e的位置、清空顺序表、销毁顺序表、合并两个非递减顺序表操作。
这次在网上学习到了新的布局方法,将顺序表的存储结构定义,函数说明部分放在了头文件里,源文件中实现的是主函数和各功能函数。
这次使用的编译环境是vc++6.0
//头文件部分
#define LIST_INIT_SIZE 5
#define INCREAMENT 5
typedef char Elemtype;
typedef int Status;
//线性表存储结构定义
typedef struct {
Elemtype *elem;
int length;
int listsize;
}SqList;
//函数说明部分
Status InitList(SqList &L);
Status CreateList(SqList &L,int size);
Status TraverseList(SqList L);
Status ListInsert(SqList &L,int i,Elemtype e);
Status ListDelete(SqList &L,int i,Elemtype &e);
int LocateElem(SqList L,Elemtype e,Status (*compare)(Elemtype e,Elemtype temp));
Status ClearList(SqList &L);
Status DestroyList(SqList &L);
Status EqualElem(Elemtype e,Elemtype temp);
void MergeList(SqList La,SqList Lb,SqList &Lc); //源文件部分
#include<stdio.h>
#include <stdlib.h>//malloc函数包含在其中
//将自定义头文件包含进来时只能用""
#include"ListHeader.h"
//程序入口
void main(){
int size=;
SqList list;
Elemtype deletes;
InitList(list);
CreateList(list,size);
// TraverseList(list);
// ListInsert(list,5,'o');
// TraverseList(list);
// ListDelete(list,5,deletes);
// TraverseList(list);
// printf("找到符合compare关系的元素位序是:%d\n",LocateElem(list,'b',EqualElem));
// ClearList(list);
// TraverseList(list);
// DestroyList(list);
// TraverseList(list);
SqList list2;
InitList(list2);
CreateList(list2,);
SqList list3;
InitList(list3);
MergeList(list,list2,list3);
TraverseList(list3);
getchar();
}
//初始化一个顺序表
Status InitList(SqList &L){
//分配内存
L.elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!L.elem){
return false;
}
L.length=;
L.listsize=LIST_INIT_SIZE;
return true;
}
//创建顺序表(判断是否需要重新分配内存,将元素读入)
Status CreateList(SqList &L,int size){
if(size>L.listsize){
Elemtype *newbase;
newbase=(Elemtype *)realloc(L.elem ,(L.listsize+INCREAMENT)*sizeof(Elemtype));
if(!newbase){
return false;
}
L.elem=newbase;
L.listsize+=INCREAMENT;
}
printf("输入创建顺序表内容:\n");
for(int i=;i<size;i++){
scanf("%c",L.elem+i);
getchar();//输入了6个元素,只输入三次就自动结束,因为vc6.0将回车也算进字符里,这里用getchar()接收
}
L.length=size;
return true;
}
//顺序表的遍历,用指针来操作
Status TraverseList(SqList L){
if(L.length==){
printf("空表!");
return false;
}
printf("遍历结果:\n");
for(int i=;i<L.length;i++){
printf("%c",*(L.elem++));
printf("\n");
}
return true;
}
//顺序表中第i个元素之前插入元素,下标是i-1
Status ListInsert(SqList &L,int i,Elemtype e){
//非法判断
if(i<||i>L.length){
return false;
}
if(L.length>=L.listsize){
Elemtype *newbase;//这里为了更好的判断出空间分配结果,新建一个变量newbase
newbase=(Elemtype *)realloc(L.elem,(L.listsize+INCREAMENT)*sizeof(Elemtype));
if(!newbase){
return false;
}
L.listsize+=INCREAMENT;
}
Elemtype *itemp,*ttemp;
itemp=&(L.elem[i-]);
ttemp=&(L.elem[L.length-]);
for(ttemp;ttemp>=itemp;ttemp--){
*(ttemp+)=*ttemp;
}
*itemp=e; //这里的itemp始终指向第i个元素的位置,所以用他赋值较好
L.length+=;
return true;
}
//删除顺序表中第i个元素
Status ListDelete(SqList &L,int i,Elemtype &e){
if(i<||i>L.length){
return false;
}
Elemtype *itemp=&(L.elem[i-]);
e=*itemp;
Elemtype *ttemp=&(L.elem[L.length-]);
for(itemp;itemp<ttemp;itemp++){
*itemp=*(itemp+);
}
L.length--;
return true;
}
//返回顺序表中第一个与e满足compare()关系的元素位序,不存在返回0
int LocateElem(SqList L,Elemtype e,Status (*compare)(Elemtype e,Elemtype temp)){
int i=;
Elemtype *temp=L.elem;
while(!(*compare)(e,*temp)&&i<=L.length){
temp++;
i++;
}
if(i>L.length){
i=;
}
return i;
}
//清空顺序表,只让length=0
Status ClearList(SqList &L){
L.length=;
return true;
}
//销毁顺序表,释放elem指针
Status DestroyList(SqList &L){
if(L.elem){
free(L.elem);
}
L.length=;
return true;
}
//两个元素是否相等
Status EqualElem(Elemtype e,Elemtype temp){
if(e==temp){
return true;
}
return false;
}
//将两个值不递减的顺序表合并到一个新的顺序表中
void MergeList(SqList La,SqList Lb,SqList &Lc){
Lc.listsize=La.length+Lb.length;
Lc.length=Lc.listsize;
Lc.elem=(Elemtype *)malloc(Lc.listsize*sizeof(Elemtype));
Elemtype *pa,*pb,*pa_last,*pb_last,*pc;
pa=&La.elem[];
pb=&Lb.elem[];
pa_last=&(La.elem[La.length-]);
pb_last=&(Lb.elem[Lb.length-]);
pc=&Lc.elem[];
while(pa<=pa_last&&pb<=pb_last){
if(*pa<*pb){
*pc++=*pa++;
}
else{
*pc++=*pb++;
}
}
while(pa<=pa_last){
*pc++=*pa++;
}
while(pb<=pb_last){
*pc++=*pb++;
}
}
数据结构(C语言版)顺序表相关算法代码实现的更多相关文章
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 深入浅出数据结构C语言版(1)——什么是数据结构及算法
在很多数据结构相关的书籍,尤其是中文书籍中,常常把数据结构与算法"混合"起来讲,导致很多人初学时对于"数据结构"这个词的意思把握不准,从而降低了学习兴趣和学习信 ...
- 深入浅出数据结构C语言版(2)——简要讨论算法的时间复杂度
所谓算法的"时间复杂度",你可以将其理解为算法"要花费的时间量".比如说,让你用抹布(看成算法吧--)将家里完完全全打扫一遍大概要5个小时,那么你用抹布打扫家里 ...
- 深入浅出数据结构C语言版(17)——有关排序算法的分析
这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什 ...
随机推荐
- Automated Front End Test - Xvfb, Chromedriver, Selenium, Jenkins
1. Install Xvfbm, google-chrome-stable and chromedriver in Jenkins sudo apt-get install -y xvfb goog ...
- 聊一聊JQ中delegate事件委托的好处
下面举个例子 我们希望通过点击使得点击的li标签变红 <body style="height:2000px;"> <ul> <li>1111&l ...
- 基于dubbo的SSM(Spring,SpringMvc,Mybatis)整合的Maven多工程(下)
上篇是SSM的maven单工程(http://www.cnblogs.com/yuanjava/p/6748956.html).中篇是 SSM的maven多工程(http://www.cnblogs. ...
- eclipse hibernate导出数据库实体类
打开eclipse->help->Eclipse Marketplace->查找hibernate->安装如下插件 只要安装其中一个,hibernate tool即可: 安装完 ...
- 打开Eclipse弹出“No java virtual machine was found..."的解决方法
今天准备用Eclipse抓取Android应用崩溃log,打开Eclipse时发现运行不了有以下弹框 A Java Runtime Environment(JRE) or Java Developme ...
- 【Spark2.0源码学习】-9.Job提交与Task的拆分
在前面的章节Client的加载中,Spark的DriverRunner已开始执行用户任务类(比如:org.apache.spark.examples.SparkPi),下面我们开始针对于用 ...
- 网络安全——一图看懂HTTPS建立过程
关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...
- Nginx上部署HTTPS
Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev,且ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/, ...
- [bzoj4872]分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- Python中的枚举
在Python中想要实现枚举功能的方式比较多,可以通过字典这一数据结构,利用键与值的对应关系,可以实现枚举的功能. my_Enum={ 'red':1, 'yellow':2, 'blue':3 } ...