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;}