02_线性表的链式存储结构---单链表
来源:互联网 发布:两年工作经验的程序员 编辑:程序博客网 时间:2024/06/18 14:11
chennan
/**linkList.h*/#pragma once#include <iostream>#include <malloc.h>using namespace std;struct LinkListNode { LinkListNode *next;};struct LinkList { LinkListNode header; int length;} ;class linkList{ public: linkList(); ~linkList(); LinkList* LinkList_Create(); void LinkList_Destroy(LinkList* list); void LinkList_Clear(LinkList* list); int LinkList_Length(LinkList* list); int LinkList_Insert(LinkList* list, LinkListNode* node, int pos); LinkListNode* LinkList_Get(LinkList* list, int pos); LinkListNode* LinkList_Delete(LinkList* list, int pos);};
/**linkList.cpp*/#include "linkList.h"linkList::linkList(){}linkList::~linkList() {}LinkList * linkList::LinkList_Create() { //o(1) LinkList *list = (LinkList*)malloc( sizeof(LinkList) ) ; if ( nullptr!=list ) { list->length = 0; list->header.next = nullptr; } return list;}void linkList::LinkList_Destroy(LinkList * list) {//o(1) if (nullptr != list ) { free(list); list = nullptr; }}void linkList::LinkList_Clear(LinkList * list) {//o(1) if ( nullptr!=list ) { list->header.next = nullptr; list->length = 0; }}int linkList::LinkList_Length(LinkList * list) { int ret = -1; if ( nullptr!=list ) { ret = list->length; } return ret;}int linkList::LinkList_Insert(LinkList * list, LinkListNode * node, int pos) {//o(n) int ret = (list!=nullptr)&&(pos>=0); if ( ret ) { LinkListNode *temp = (LinkListNode*)&list->header; for (int i=0 ; (i<pos)&&(temp->next!=nullptr) ; --i ) { temp = temp->next; } node->next = temp->next; temp->next = node; ++list->length ; } return ret ;}LinkListNode * linkList::LinkList_Get(LinkList * list, int pos) {//o(n) LinkListNode* ret = nullptr; int i = 0; if ( (list!=nullptr)&&(pos>=0)&&(pos<list->length) ) { LinkListNode *node = (LinkListNode*)&list->header; for (i = 0; i < pos; ++i ) { node = node->next; } ret = node->next; } return ret;}LinkListNode * linkList::LinkList_Delete(LinkList * list, int pos) { //o(n) LinkListNode * ret = nullptr; int i = 0; if ( (list!=nullptr)&&(0<=pos)&&(pos<list->length) ) { LinkListNode *node = (LinkListNode*)&list->header; for (i = 0; i < pos; ++i ) { node = node->next; } ret = node->next; node->next = ret->next; --list->length; } return ret ;}
/**main.cpp*/#include "linkList.h"struct Value{ LinkListNode header; int v;};int main(int argc, char *argv[]){ linkList chen; int i = 0; LinkList* list = chen.LinkList_Create(); struct Value v1; struct Value v2; struct Value v3; struct Value v4; struct Value v5; v1.v = 1; v2.v = 2; v3.v = 3; v4.v = 4; v5.v = 5; chen.LinkList_Insert(list, (LinkListNode*)&v1, chen.LinkList_Length(list)); chen.LinkList_Insert(list, (LinkListNode*)&v2, chen.LinkList_Length(list)); chen.LinkList_Insert(list, (LinkListNode*)&v3, chen.LinkList_Length(list)); chen.LinkList_Insert(list, (LinkListNode*)&v4, chen.LinkList_Length(list)); chen.LinkList_Insert(list, (LinkListNode*)&v5, chen.LinkList_Length(list)); for (i = 0; i<chen.LinkList_Length(list); i++) { struct Value* pv = (struct Value*)chen.LinkList_Get(list, i); printf("%d\n", pv->v); } while ( chen.LinkList_Length(list) > 0) { struct Value* pv = (struct Value*)chen.LinkList_Delete(list, 0); printf("%d\n", pv->v); } chen.LinkList_Destroy(list); return 0;}
阅读全文
0 0
- 02_线性表的链式存储结构---单链表
- 数据结构:线性表的链式存储结构_单链表
- 线性表的链式存储结构-单链表
- 线性表的链式存储结构---单链表
- 线性表的链式存储结构--单链表
- 线性表的链式存储结构:单链表
- 线性表之链式存储结构_单链表相关算法
- 线性表_顺序存储结构和链式存储结构的优缺点比较(区别)
- 线性表的链式存储结构
- 链式存储结构的线性表
- 线性表的链式存储结构
- 【数据结构】线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 线性表的链式存储结构
- 【二】线性表的链式存储结构
- Windows平台搭建基于PyQt5.8.2开发Python GUI程序的环境(含打包过程)
- 聚簇索引和非聚簇索引的区别
- Android studio 设置五颜六色的logcat
- POJ 1200 Crazy Search 笔记
- mysql case when then else 用法
- 02_线性表的链式存储结构---单链表
- plant(植物)
- 03_线性表的链式存储结构---静态链表
- 04_线性表的链式存储结构---循环链表
- 05_线性表的链式存储结构---双向链表
- RTP over RTSP(TCP)
- WIN10电脑,安装双系统(CentOS 6.4) 各种出错
- 项目调错笔记
- 06_栈的顺序存储