01_线性表的顺序存储结构
来源:互联网 发布:人工智能产业园区规划 编辑:程序博客网 时间:2024/06/03 10:08
这个顺序链表中申请的空间存放的只是指针。
/**seqList.h*/#pragma once#ifndef _SEQLIST_H_#define _SEQLIST_H_#include <iostream>#include <malloc.h>using namespace std;//typedef unsigned int SeqListNode;using SeqListNode = unsigned int ;struct SeqList { int capacity; int length; SeqListNode * next;};class seqList { public: seqList(); ~seqList(); SeqList* SeqList_Create(int capacity); void SeqList_Destroy(SeqList* list); void SeqList_Clear(SeqList* list); int SeqList_Length(SeqList* list); int SeqList_Capacity(SeqList* list); int SeqList_Insert(SeqList* list, SeqListNode* node, int pos); SeqListNode* SeqList_Get(SeqList* list, int pos); SeqListNode* SeqList_Delete(SeqList* list, int pos);};#endif
/**seqList.c*/#include "seqList.h"seqList::seqList(){}seqList::~seqList(){}SeqList * seqList::SeqList_Create(int capacity){ //o(1) SeqList *ret = nullptr ; if( capacity>0 ) { ret = (SeqList*)malloc( sizeof(SeqList)+capacity*sizeof(SeqListNode*) ); } if ( ret!=nullptr ) { ret->capacity = capacity; ret->length = 0; ret->next = (SeqListNode*)(ret + 1); } return ret ;}void seqList::SeqList_Destroy(SeqList * list) { //o(1) if ( list!=nullptr ) { free( list ); list = nullptr; }}void seqList::SeqList_Clear(SeqList * list) {//o(1) if ( nullptr!=list ) { list->length = 0; //这个要不要无所谓 //list->next = (SeqListNode *)(list + 1); }}int seqList::SeqList_Length(SeqList * list) {o(1) int ret = -1; if ( nullptr!=list ) { ret = list->length; } return ret;}int seqList::SeqList_Capacity(SeqList * list) {o(1) int ret = -1; if ( nullptr!=list ) { ret = list->capacity; } return ret;}int seqList::SeqList_Insert(SeqList * list, SeqListNode * node, int pos) {//o(n) int ret = -1; int i = 0; ret = (list!=nullptr) && (pos>=0 ); ret = ret && ( list->length+1<=list->capacity); if ( ret ) { if ( pos>=list->length ) { pos = list->length; } for (int i = list->length; i > pos; --i) { list->next[i] = list->next[i - 1]; } //这个申请的空间是存放指针的,所以要把传进来的地址抢转。 list->next[i] = (SeqListNode)node; ++list->length; } return ret;}SeqListNode* seqList::SeqList_Get(SeqList * list, int pos) {//o(1) SeqListNode *ret = nullptr; if ( (list!=nullptr)&&(pos>=0)&&(pos<list->length) ) { //这里申请的空间存放的内容是地址,但是其声明的类型是无符号整形,不是指针类型,所以要强转通知编译器这是地址。 ret = (SeqListNode*)list->next[pos]; } return ret ;}SeqListNode * seqList::SeqList_Delete(SeqList * list, int pos) {//o(n) SeqListNode* ret = SeqList_Get(list,pos) ; if ( ret != nullptr ) { for (int i = pos + 1; i < list->length; ++i ) { list->next[i - 1] = list->next[i]; } --list->length ; } return ret;}
/**main.c*/#include "seqList.h"int main( int argc , char **argv ) { seqList chen; SeqList* list = chen.SeqList_Create(5); SeqListNode i = 0; SeqListNode j = 1; SeqListNode k = 2; SeqListNode x = 3; SeqListNode y = 4; SeqListNode z = 5; int index = 0; chen.SeqList_Insert(list, &i, 0); chen.SeqList_Insert(list, &j, 0); chen.SeqList_Insert(list, &k, 0); chen.SeqList_Insert(list, &x, 0); chen.SeqList_Insert(list, &y, 0); chen.SeqList_Insert(list, &z, 0); for (index = 0; index<chen.SeqList_Length(list); index++) { int* p = (int*)chen.SeqList_Get(list, index); printf("%d\n", *p); } printf("\n"); while (chen.SeqList_Length(list) > 0) { int* p = (int*)chen.SeqList_Delete(list, 0); printf("%d\n", *p); } chen.SeqList_Destroy(list); return 0;}
阅读全文
0 0
- 01_线性表的顺序存储结构
- 线性表_顺序存储结构和链式存储结构的优缺点比较(区别)
- 线性表的顺序结构存储
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 顺序存储结构的线性表
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 【数据结构】线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表的顺序存储结构
- 线性表顺序存储结构的优缺点
- 线性表顺序存储结构的优缺点
- 线性表的顺序存储结构
- Java实现查找链表的中间节点,(在未知链表长度的情况下)
- js复习笔记(忘记tbodies)
- Java中关于关键字new创建字符串对象的总结
- windows eclips JNI开发环境
- 欢迎使用CSDN-markdown编辑器
- 01_线性表的顺序存储结构
- 公共技术点之 Java 反射 Reflection
- 算法分析与设计课程11——467. Unique Substrings in Wraparound String(Medium)
- angular2实例
- 检查iptables服务状态,关闭将会自动开启
- 自定义Toast(悬浮窗口)
- 从printf谈可变参数函数的实现[转载]
- 多源最短路径--floyd算法
- 1110. Complete Binary Tree (25)[完全二叉树]