1、双向链表的增删改查(一部分)
#include <stdio.h>
#include <stdlib.h>
struct NODE
{
int data;
NODE* pPrior;
NODE* pNext;
};
NODE* head = NULL;
NODE* tail = NULL;
void showall()
{
printf("-----------\n");
NODE* p = head;
while(p != NULL)
{
printf("%d\n",p->data);
p=p->pNext;
}
}
void add(int a)
{
NODE* node=(NODE*)malloc(sizeof(NODE));
node->data=a;
if(head==NULL)
{
head=node;
tail=node;
}
else
{
node->pNext=NULL;
node->pPrior=tail;
tail->pNext=node;
tail=node;
}
}//从后面插入
void headadd(int a)
{
NODE* node=(NODE*)malloc(sizeof(NODE));
node->data=a;
if(head==NULL)
{
head=node;
tail=node;
}
else
{
node->pNext=head;
head=node;
}
}//头插法
void middadd(int b,int a)
{
NODE* node=(NODE*)malloc(sizeof(NODE));
node->data=a;
node->pNext=NULL;
node->pPrior=NULL;
NODE* x=head;
while(x!=NULL)
{
if(x->data==b)
{
node->pNext=x->pNext->pNext;
x->pNext=node;
break;
}
x=x->pNext;
}
}
void deleteNode(int data)
{
NODE* y=head,*z;
while(y!=NULL)
{
if(y->data==data)
{
y->pPrior->pNext=y->pNext;
}
y=y->pNext;
}
}
void change(int old,int xin)
{
NODE* p=head;
while(p!=NULL)
{
if(p->data==old)
{
p->data=xin;
}
p=p->pNext;
}
}//修改
int main(int argc,char* args[])
{
add(1);
add(2);
add(3);
add(4);
add(5);
add(6);
add(7);
showall();
headadd(500);
showall();
middadd(2,999);
showall();
change(2,900);
showall();
deleteNode(900);
showall();
return 0;
}
-----------
1
2
3
4
5
6
7
-----------
500
1
2
3
4
5
6
7
-----------
500
1
2
999
4
5
6
7
-----------
500
1
900
999
4
5
6
7
-----------
500
1
999
4
5
6
7