數據結構 線性表 鏈式 c++源代碼 實現

1.頭文件

#include <stdlib.h>
#include <malloc.h>

2.聲明 和宏定義

#define ElemType int
#define OK 1
#define ERROR 0

typedef int Status;
typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node,*LinkList;

3.類和方法的聲明

class LNode
{
public:
    LNode();
    ~LNode();
    void   CreateList_L(LinkList& L);
    Status AppendElem_L(LinkList& L, ElemType &e);
    Status GetElem_L(LinkList& L,int i, ElemType &e);
    Status ListInsert_L(LinkList& L,int i, ElemType &e);
    Status ListDelete_L(LinkList& L,int i, ElemType &e);
    void   DestroyList_L(LinkList& L);
private:
    int size;

};

4.方法實現

LNode::LNode(){
    size = 0;
}
LNode::~LNode(){

}

void LNode::CreateList_L(LinkList& L)
{
    L=(LinkList)malloc(sizeof(Node));
    L->next=NULL;
}

Status LNode::AppendElem_L(LinkList& L, ElemType &e)
{
    LinkList p = L;
    while (p->next!=NULL)
    {
        p=p->next;
    }
    LinkList q = (LinkList)malloc(sizeof(Node));
    if (!q)
    {
        return ERROR;
    }
    q->data = e;
    q->next=p->next;
    p->next = q;
    return OK;
}

Status LNode::ListInsert_L(LinkList& L,int i, ElemType &e)
{
    LinkList p = L;int j = 1;
    while (p->next!=NULL && j++<i)
    {
        p=p->next;
    }
    LinkList q = (LinkList)malloc(sizeof(Node));
    if (!q)return ERROR;

    q->data = e;
    q->next=p->next;
    p->next = q;
    return OK;
}

Status LNode::GetElem_L(LinkList& L,int i, ElemType &e)
{
    LinkList p = L->next;int j = 1;
    while (p!=NULL && j++<i)
    {
        p=p->next;
    }
    if(!p || j-1>i) return ERROR;
    e = p->data;
    return OK;
}

Status LNode::ListDelete_L(LinkList& L,int i, ElemType &e)
{
    LinkList p = L;int j = 1;
    while (p->next!=NULL && j++<i)
    {
        p=p->next;
    }
    if(!(p->next) || j-1>i) return ERROR;
    LinkList q = p->next;
    e = q->data;
    p->next = q->next;
    free(q);
    return OK;
}

void LNode::DestroyList_L(LinkList& L){
    LinkList q = L;
    LinkList p = L;
    while (p->next)
    {
        q = p->next;
        p->next = q->next;
        free(q);
    }
    if (L)
    {
        free(L);
    }

}

5.測試

int _tmain(int argc, _TCHAR* argv[])
{
    LNode lnode;
    Node node;
    LinkList  p_node = NULL;

    lnode.CreateList_L(p_node);
    int i=0;
    while (i<10)
    {
        lnode.AppendElem_L(p_node,i);
        i++;
    }
    int in = 10;
    lnode.ListInsert_L(p_node,5,in);
    i=1;ElemType e = 0;
    LinkList p = p_node;
    while(p->next){
        lnode.GetElem_L(p_node,i,e);
        printf("%d:%d\n",i++,e);
        p=p->next;
    }
    lnode.ListDelete_L(p_node,4,in);
    lnode.DestroyList_L(p_node);

    getchar();
    return 0;
}
相關文章
相關標籤/搜索