数据结构之——C++顺序表
来源:互联网 发布:淘宝商城收费标准 编辑:程序博客网 时间:2024/06/15 02:22
顺序表可以说是最基础的数据结构,在此用C++实现,代码可能会有瑕疵,还请大神指正。
#include <iostream> #define Status int#define TRUE 1#define FALSE 0#define OVERFLOW -1#define MAX_LENGTH 3using namespace std;typedef int (*pf)(const int& a,const int& b);typedef struct ElemType{int id;int key;}ElemType;typedef struct{ElemType *elem;int length;int listsize;}SQ_LIST;/** * 比较两个整数值 */Status cmp(const int& a,const int& b){return a==b;}/** * 初始化顺序表 */void InitList(SQ_LIST *L){L->elem = new ElemType[MAX_LENGTH];L->length = 0;L->listsize = MAX_LENGTH; }/** * 清空顺序表 */Status ClearList(SQ_LIST *L){L->length = 0;L->listsize = 0;}/** * 销毁顺序表 */void DestroyList(SQ_LIST *L){delete []L->elem;ClearList(L);} /** * 返回顺序表长度 */Status ListLength(SQ_LIST L){return L.length;}/** * 判断顺序表是否为空 */Status IsEmpty(SQ_LIST L){return 0 == L.length;}/** * 获取指定位序的元素 */ElemType * GetElem(SQ_LIST L, int i){if(i<1 || i>L.length)return FALSE;return &L.elem[i];}/** * 定位关键字所在的位序 */Status LocateElem(SQ_LIST *L, int key, pf cmp){for(int i = 1; i<= L->length; i++){if(cmp(key, L->elem[i].key)){return L->elem[i].id;}}return FALSE;}/** * 插入新元素 */Status ListInsert(SQ_LIST *L, int i, ElemType elem){if(L->length >= L->listsize)return OVERFLOW;if(i<1 || i> L->length)return FALSE;for(int n = L->length; n>i; n--){L->elem[n] = L->elem[n-1]; }elem.id = i;L->elem[i] = elem;L->length++;return TRUE;}/** * 删除元素 */Status ListDelete(SQ_LIST *L, int i, ElemType *elem){if(i<1 || i> L->length)return FALSE;elem = &L->elem[i];for(int n = i;n< L->length; n++){L->elem[n] = L->elem[n+1];}L->length--;return TRUE;}/** * 对顺序表关键字逆置 */void ListReverse(SQ_LIST *L){int i = 1, j = L->length; ElemType temp; while(i < j) { temp = L->elem[i]; L->elem[i].key = L->elem[j].key; L->elem[j].key = temp.key; i++; j--; }}/** * 输出表数据 */void ListOutput(SQ_LIST L){cout<<"表中数据为:"<<endl;cout<<"id\tkey"<<endl;for(int i = 1; i<= L.length; i++){cout<<L.elem[i].id<<"\t"<<L.elem[i].key<<endl;}} /** *追加数据(用于初始化数据) */Status ListAppend(SQ_LIST *L, ElemType elem){L->elem[++L->length] = elem;if(L->length >= L->listsize)return OVERFLOW;return TRUE;}int main(){ElemType elem;SQ_LIST L;InitList(&L);int i = 1;do{cout<<"请输入数据"<<endl;elem.id = i;cin>>elem.key;if(OVERFLOW == ListAppend(&L, elem)){cout<<"数据插入完成"<<endl;break;}i++;} while(TRUE);ElemType *nelem = GetElem(L, 2);if(nelem){cout<<"位序为2的元素为, id: "<<nelem->id<<", key: "<<nelem->key<<endl;}else{cout<<"没有此元素"<<endl;}// 逆置ListReverse(&L);ListOutput(L);if(TRUE == LocateElem(&L, 2, &cmp)){cout<<"位序为2的id为 "<< LocateElem(&L, 2,&cmp)<<endl;}// 删除元素(删除第一个元素) int flag = ListDelete(&L, 1, &elem);if(flag){cout<<"删除成功, id: "<<elem.id<<",key: "<<elem.key<<endl; }else{cout<<"删除元素失败,此位置未定义元素"<<endl;} // 插入元素elem.key = 7;flag = ListInsert(&L, 1, elem); if(flag){cout<<"插入成功,id: "<<elem.id<<",key: "<<elem.key<<endl; }// 清空表if(! IsEmpty(L) && ClearList(&L)){cout<<"表已被清空,当前表长度为 "<<ListLength(L)<<endl;}// 释放元素DestroyList(&L); return 0;}
1 0
- 数据结构之线性表——顺序表(C#)
- 数据结构之顺序表——c(&为取值符)
- 熟悉笔记—数据结构(c语言版) 之 顺序表
- 数据结构之顺序表(部分参考C博客—文逗,整理和参考严蔚敏版数据结构)
- 数据结构——顺序表(c++)
- C语言数据结构——顺序表
- C++——数据结构之 顺序队列 链式队列?
- C数据结构-线性表之顺序表
- 数据结构C语言实现之顺序表
- 数据结构(c语言版)之顺序表
- c语言数据结构之顺序表
- 简单数据结构之顺序表(C实现)
- 数据结构之——C++顺序表
- 数据结构(严蔚敏)之一——顺序表之c语言实现
- [C++] 数据结构之顺序栈
- [C++] 数据结构之顺序队列
- 数据结构—顺序表
- 数据结构之—线性表之—顺序表
- python Numpy 函数整理(一)
- HDU--活动安排问题--今年暑假不AC2037
- 1.spark.ml.feature.VectorAssembler
- maven学习1.0
- d3.js选择、插入、删除元素
- 数据结构之——C++顺序表
- 十个利用矩阵乘法解决的经典题目
- 设计算法查找二叉树的两个结点最近公共祖先(LCA)
- 物理内存和虚拟内存的理解
- composer -- LNMP配置-笔记
- 会用人、会管人
- CountDownLatch使用
- 问题:向Mysql数据库中插入时间类型数据,数据库中只有日期没有时分秒
- Java目录操作