sqlist顺序表
2015-07-13 15:21
375 查看
#include "sqList.h" /**********函数实现*******/ Status InitList(SqList &L) {//初始化顺序表 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; } Status DestroyList(SqList &L) {//销毁顺序表 free(L.elem); /// L.elem=NULL; // L.length=0; // L.listsize=0; return OK; } Status ClearList(SqList &L) {//重置顺序表 L.length=0; return OK; } Status ListEmpty(SqList L) {//判断表空 if(L.length==0) return TRUE; return FALSE; } Status ListLength(SqList L) {//返回顺序表表长 if(!ListEmpty(L)) return L.length; return 0; } Status ListInsert(SqList &L,int i,ElemType e) { //顺序表插入操作 //1判断i值合法 ElemType *p,*q; if(i<1||i>L.length+1) return ERROR; //2判断存储空间是否满 if(L.length>=L.listsize) { ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit (OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } //3插入元素 q=&L.elem[i-1]; for(p=&L.elem[L.length-1];p>=q;p--) { *(p+1)=*p; } *q=e; L.length++; return OK; } Status ListDelete(SqList &L,int i,ElemType &e) {//顺序表删除操作 //1.判断i值合法性 ElemType *p,*q; if(i<1||i>L.length) return ERROR; //2.删除元素 p=&L.elem[i-1]; e=*p; q=&L.elem[L.length-1]; for(++p;p<=q;++p) { *(p-1)=*p; } L.length--; return OK; } Status GetElem(SqList L,int i,ElemType &e) {//获取元素操作 if(i<1||i>L.length) return ERROR; if(ListEmpty(L)) return ERROR; e=L.elem[i-1]; return OK;//空表? } Status LocateElem(SqList L,ElemType e) {//定位 ElemType *p; int i=1; p=L.elem; /* while(i<=L.length||!compare(*p++,e))*/ while(i<=L.length&&*p!=e) { i++; p++; } if(i<=L.length) return i; return ERROR; } Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e) {//返回元素的前驱(前驱不存在) int i=2; ElemType *p; p=L.elem+1; while (i <= L.length &&*p!= cur_e) {//? i++; p++; } if(i<=L.length) pre_e=*--p; return OK; } Status NextElem(SqList L,ElemType cur_e,ElemType &next_e) {//返回元素的后继(后继不存在) int i=1; ElemType *p; p=L.elem; while(i<L.length&&*p!=cur_e) { i++; p++; } if (i < L.length) next_e = *p++; return OK; } /* void print(ElemType c){ //打印元素 printf("%d",c); }*/ /* Status ListTraverse(SqList L,void(*visit)(ElemType&)) {//遍历数组元素//? ElemType *p; int i; p=L.elem; for(i=0;i<L.length;i++) { visit(p++); } printf("\n"); return OK; }*/ Status ListTraverse(SqList L) {//遍历元素 int i; for(i=0;i<L.length;i++) { printf("%d ",L.elem[i]); } printf("\n"); return OK; }
/*sqlist.cpp*/
/* 顺序表操作SqList by Amily */ /******函数声明与头文件******/ #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define LIST_INIT_SIZE 100//初始分配量 #define LISTINCREMENT 10//分配增量 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW 0 typedef int ElemType; typedef int Status; typedef struct { ElemType *elem;//基地址 int length; //数组长度 int listsize; //初始容量 // }SqList; Status InitList(SqList &L);//初始化顺序表 Status DestroyList(SqList &L);//销毁顺序表 Status ClearList(SqList &L);//重置顺序表 Status ListEmpty(SqList L);//判断表空 Status ListLength(SqList L);//返回顺序表表长 Status ListInsert(SqList &L,int i,ElemType e);//顺序表插入操作 Status ListDelete(SqList &L,int i,ElemType &e);//顺序表删除操作 Status GetElem(SqList L,int i,ElemType &e);//获取元素操作 Status LocateElem(SqList L,ElemType e);//定位 Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);//返回元素的前驱 Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);//返回元素的后继 //Status ListTraverse(SqList L,void(*visit)(ElemType&));//遍历数组元素 Status ListTraverse(SqList L);//遍历元素 //void print(ElemType &c);//打印元素
相关文章推荐
- C# List中写出LINQ类似SQL的语句
- MySql中in和exists效率对比
- mysql创建用户、授权、导入sql脚本
- 数据库原理总结
- Oracle数组类型
- MySQL导入sql脚本错误:2006 - MySQL server has gone away
- 数据库备份 计划任务
- Ubuntu14.04 下安装oracle 11
- (转)oracle外连接符号(+)的用法
- MySQL 配置优化
- 十四、oracle 数据库管理--管理表空间和数据文件
- MyBatis笔记(九)——动态SQL与模糊查询
- Mongodb基本操作入门,增删改查和索引
- oracle中的nvl 、nvl2、decode、case when 函数的用法
- oracle base one
- 支持连接池和结果集缓存的MySQL数据库JDBC通用框架的轻量级封装(一)——粗略实现
- sqlite导入mysql
- 点击数据库提示“评估期已过”该怎么办?
- oracle logminer初步学习与使用
- SQL中WHERE子句中的连接顺序