シングルチェーンテーブルおよびデュアルチェーンテーブル操作
12737 ワード
0.削除(単一チェーンテーブル)ノードpを削除するには、前のノードの位置を知る必要がある
0.1.ノード定義
1.チェーンテーブルの作成
2.チェーンテーブル遍歴
3.チェーンテーブル挿入
node *searchPr(node *h,int k){// k
node *p=h;
while(p->next!=NULL)//p
{
if(p->next->data==k) return p;// k, p
p=p->next; //p
}
return NULL;// k ,
}
void deletNode(node *h,int k){
// k
//1.
node *pr=searchPr(h,k);// k
//2.
node *p=pr->next;//p
//2.2
pr->next=p->next;
p->next=NULL;//
//3.
delete p;
}
0.1.ノード定義
typedef struct node{
int data;//
node *next;//
node *pre;//
}node;
1.チェーンテーブルの作成
node *creat(node *h,int n){
node *p=h;
for(int i=1;i<=n;i++){
int x;
cin>>x;// ( )
node *s=new node;//
s->data=x;//
s->next=s->pre=NULL;
p->next=s;
s->pre=p;
p=p->next;//p
}
return p;//
}
2.チェーンテーブル遍歴
void show(node *h){//
//
node *p=h->next;
while(p!=NULL){
cout<<p->data<<" ";
//p
p=p->next;
}
}
void show2(node *t,node *h){//
//
node *p=t;
while(p!=h){
cout<<p->data<<" ";
p=p->pre;
}
}
3.チェーンテーブル挿入
void insertRight(node *p,node *s){
//
node *aft=p->next;
p->next=s;
s->pre=p;
s->next=aft;
if(aft!=NULL){
aft->pre=s;
}
}
void insertLeft(node *p,node *s){
//
node *q=p->pre;
s->next=p;
s->pre=q;
p->pre=s;
if(q!=NULL){
q->next=s;
}
}