数据结构(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)——有关排序算法的分析
这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什 ...
随机推荐
- struts2.1.6教程十一、注解配置
在此先略去注解配置的实例,具体可以参看官方提供的文档.其实在熟悉struts及相关的一些内容后,再来看文档是比较容易理解得.只是要注意使用注解Annotition时: (1)要多导入一个jar包:st ...
- Gradle 使用Maven本地缓存
如果想使用Maven本地缓存,需要定义:build.gradle 文件下定义 build.gradle repositories { mavenLocal() } Gradle使用与Maven相同的策 ...
- net.sf.json.JSONException: java.lang.reflect.InvocationTargetException Caused by: java.lang.IllegalArgumentException at java.sql.Date.getHours(Unknown Source)
数据库字段类型为Date,转成JSON格式会有问题,解决方案如下: json-lib有一个配置类JsonConfig通过JsonConfig可以注册一个字段处理器实现JsonValueProcesso ...
- Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker]
linux中的JDK为JDK8,tomcat为tomcat8 加入dubbo.war包 启动报错! Caused by: org.springframework.beans.factory.BeanC ...
- node.js入门系列(一)--Node.js简介
什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一 ...
- 原型----------prototype详细解答
function ren(name,age){ this.name=name; this.age=age; this.fa=function(){ alert('我喜欢吃'); } } var p1= ...
- OCI(Open Container Initiative) & OCF (Open Container Format)
Linux基金会于2015年6月成立OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准. 开放容器格式标准(OCF, Open Cont ...
- Cordova各个插件使用介绍系列(三)—$cordovaImagePicker从手机图库选择多张图片
详情链接地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-3-cordovaimagepicker/ 这是能从手 ...
- python 打印文件里的内容
>>> import os >>> os.chdir ('e:/')>>> data=open('text.txt')>>> f ...
- PHPCMS v9 自定义表单添加验证码
1. 在 \phpcms\templates\default\formguide\show.html 中添加验证码显示 <input type="text" id=&quo ...