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