这两天实现了一下顺序表的相关操作,包括顺序表初始化、创建、遍历、第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语言版)顺序表相关算法代码实现的更多相关文章

  1. 数据结构(C语言版)顺序栈相关算法的代码实现

    这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...

  2. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  3. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  4. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  5. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  6. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  7. 深入浅出数据结构C语言版(1)——什么是数据结构及算法

    在很多数据结构相关的书籍,尤其是中文书籍中,常常把数据结构与算法"混合"起来讲,导致很多人初学时对于"数据结构"这个词的意思把握不准,从而降低了学习兴趣和学习信 ...

  8. 深入浅出数据结构C语言版(2)——简要讨论算法的时间复杂度

    所谓算法的"时间复杂度",你可以将其理解为算法"要花费的时间量".比如说,让你用抹布(看成算法吧--)将家里完完全全打扫一遍大概要5个小时,那么你用抹布打扫家里 ...

  9. 深入浅出数据结构C语言版(17)——有关排序算法的分析

    这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什 ...

随机推荐

  1. 2016 UESTC Training for Dynamic Programming

    强行做做试试看吧. http://acm.hust.edu.cn/vjudge/contest/124721#overview 密码:mytrain C - 柱爷与咸鱼神功 一个简单01背包. #in ...

  2. 数据挖掘应用案例:RFM模型分析与客户细分(转)

    正好刚帮某电信行业完成一个数据挖掘工作,其中的RFM模型还是有一定代表性,就再把数据挖掘RFM模型的建模思路细节与大家分享一下吧!手机充值业务是一项主要电信业务形式,客户的充值行为记录正好满足RFM模 ...

  3. Java servlet ajax

    AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. http://w ...

  4. 打印杨辉三角--for循环

    要求打印7行直角杨辉三角 杨辉三角特点: 第1行和第2行数字都为1: 从第三行开始,除去开头和结尾数字为1,中间数字为上一行斜对角两个数字的和. 如下图: 打印结果: 代码如下: package 杨辉 ...

  5. 论文笔记 Spatial contrasting for deep unsupervised learning

    在我们设计无监督学习模型时,应尽量做到 网络结构与有监督模型兼容 有效利用有监督模型的基本模块,如dropout.relu等 无监督学习的目标是为有监督模型提供初始化的参数,理想情况是"这些 ...

  6. Python常用的第三方库

    最近学习python 做些数据挖掘相关的练习,涉及到很多第三方的库,所以做一总结. Setuptools 可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况. 我特别 ...

  7. iOS CAEmitterLayer 实现粒子发射动画效果

    iOS CAEmitterLayer 实现粒子发射动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo 动 ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6964162.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(八)--My ...

  9. iOS CAShapeLayer、CADisplayLink 实现波浪动画效果

    iOS CAShapeLayer.CADisplayLink 实现波浪动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnima ...

  10. Log POST Data in Nginx

    先编译Nginx的echo module: ./configure --add-module=./echo-nginx-module-0.54 make make install 可以在github上 ...