先頭ノードでない単一チェーンテーブルの基本操作
ノードの定義
初期化
に判決を下す
テーブルの長さを求める
ビット順に挿入
ビット順に削除
ノードの挿入を指定
ノードプリプラグの指定
typedef struct LNode{
int data; //
struct LNode *next; //
}LNode,*LinkList; //LinkList LNode *, ,
初期化
//
bool InitList(LinkList &L){
L = NULL; //
return true;
}
に判決を下す
//
bool Empty(LinkList L){
return (L==NULL);
}
テーブルの長さを求める
//
int length(LinkList L){
int len = 0;
LNode *p = L;
while(p != NULL){
p = p->next;
len++;
}
return len;
}
ビット順に挿入
// ( )
bool ListInsert(LinkList &L,int i,int e){
if(i<1)
return false;
if(i==1){ //
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L=s; //
return true;
}
LNode *p;
int j=1;
p = L;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
ビット順に削除
// ( )
bool ListDelete(LinkList &L,int i,int &e){
if(i<1)
return false;
if(i==1){
LNode *r;
r=L;
e=r->data;
L=r->next;
free(r);
return true;
}
LNode *p;
int j=1;
p=L;
while (p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==NULL) // i-1
return false;
LNode *q=p->next;
e = q->data;
p->next=q->next;
free(q);
return true;
}
ノードの挿入を指定
//
bool InsertNextNode(LNode *p,int e){
if(p==NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if (s==NULL) //
return false;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
ノードプリプラグの指定
//
bool InsertPriorNode(LNode *p,int e){
if(p==NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next = p->next;
p->next = s; // s p
s->data = p->data; // p s
p->data = e; // p e
return true;
}