博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构(C语言版)顺序表相关算法代码实现
阅读量:4930 次
发布时间:2019-06-11

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

  这两天实现了一下顺序表的相关操作,包括顺序表初始化、创建、遍历、第i个元素前插入,删除第i个元素、查找元素e的位置、清空顺序表、销毁顺序表、合并两个非递减顺序表操作。

  这次在网上学习到了新的布局方法,将顺序表的存储结构定义,函数说明部分放在了头文件里,源文件中实现的是主函数和各功能函数。

  这次使用的编译环境是vc++6.0

//头文件部分#define LIST_INIT_SIZE 5#define INCREAMENT 5typedef 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
#include
//malloc函数包含在其中//将自定义头文件包含进来时只能用""#include"ListHeader.h"//程序入口void main(){ int size=6; 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,5); 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=0; 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=0;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-1]); ttemp=&(L.elem[L.length-1]); for(ttemp;ttemp>=itemp;ttemp--){ *(ttemp+1)=*ttemp; } *itemp=e; //这里的itemp始终指向第i个元素的位置,所以用他赋值较好 L.length+=1; return true;}//删除顺序表中第i个元素Status ListDelete(SqList &L,int i,Elemtype &e){ if(i<0||i>L.length){ return false; } Elemtype *itemp=&(L.elem[i-1]); e=*itemp; Elemtype *ttemp=&(L.elem[L.length-1]); for(itemp;itemp
L.length){ i=0; } return i;}//清空顺序表,只让length=0Status ClearList(SqList &L){ L.length=0; return true;}//销毁顺序表,释放elem指针Status DestroyList(SqList &L){ if(L.elem){ free(L.elem); } L.length=0; 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[0]; pb=&Lb.elem[0]; pa_last=&(La.elem[La.length-1]); pb_last=&(Lb.elem[Lb.length-1]); pc=&Lc.elem[0]; 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++; }}

 

转载于:https://www.cnblogs.com/jiangcsu/p/5399770.html

你可能感兴趣的文章
【BZOJ】【3524】【POI2014】Couriers
查看>>
Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
查看>>
Spark学习笔记——手写数字识别
查看>>
python使用progressbar显示进度条
查看>>
一步一步学Silverlight 2系列(12):数据与通信之WebClient
查看>>
19 存储过程
查看>>
“冷面杀手”王励勤赢了
查看>>
Ubuntu下自动挂载Windows分区的方法
查看>>
页面自动刷新的几种方式
查看>>
WebIM(5)----将WebIM嵌入到页面中
查看>>
Datagridview列绑定数据
查看>>
[转]如何高效利用GitHub
查看>>
lougu P1048 采药 | 01背包
查看>>
Maven小结
查看>>
【HDOJ 5726】GCD(RMQ+二分)
查看>>
QTP 学习 - 参数化
查看>>
phpcms搭建环境
查看>>
C#常用代码片段备忘
查看>>
bsdasm
查看>>
我的盖洛普“优势识别器”测试报告
查看>>