一、双向链表
1.双向链表的按位置删除
//双向链表按位置删除
int DeletePos(doublelink L,int pos)
{
if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
return -1;
doublelink p = L;
for(int i=0;i<pos;i++)
p = p->next;
p->prev->next = p->next;
if(p->next!=NULL)
p->next->prev = p->prev;
free(p);
p=NULL;
L->len--;
return 0;
}
2.双向链表的按位置修改
//双向链表按位置修改
int UpdatePos(doublelink L,int pos,datatype e)
{
if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
return -1;
doublelink p = L;
for(int i=0;i<pos;i++)
p = p->next;
p->data = e;
return 0;
}
3.双向链表的按位置查找
//双向链表按位置查找
int SearchPos(doublelink L,int pos)
{
if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
return -1;
doublelink p = L;
for(int i=0;i<pos;i++)
p = p->next;
printf("该位置的元素为%c\n",p->data);
}
运行结果
zzy@zzy-vm:~/hqrj/struct/day5/22$ gcc *.c
zzy@zzy-vm:~/hqrj/struct/day5/22$ ./a.out
请输入插入元素个数:5
请输入插入元素:A
请输入插入元素:B
请输入插入元素:C
请输入插入元素:D
请输入插入元素:E
正向遍历
A B C D E
逆向遍历
E D C B A
请输入删除的位置:3
正向遍历
A B D E //删除位置3的元素C
逆向遍历
E D B A
-----------------------------
请输入修改的位置:3
请输入修改的值:C
正向遍历
A B C E //修改位置3的元素D,修改成C
逆向遍历
E C B A
-----------------------------
请输入查找的位置:4 //查找位置为4的元素,结果为E
该位置的元素为E
二、双向循环链表
1.双向循环链表头插
//双向循环链表头插
int InsertHead(loopdoublelink L,datatype e)
{
if(L==NULL)
return -1;
loopdoublelink s = CreateNode(0);
if(s==NULL)
return -1;
loopdoublelink p = L;
s->data = e;
s->next = p->next;
s->prev = L;
p->next->prev = s;
p->next = s;
L->len++;
return 0;
}
2.双向循环链表头删
//双向循环链表头删
int DeleteHead(loopdoublelink L)
{
if(L==NULL || L->next==L)
return -1;
loopdoublelink p = L->next;
L->next = p->next;
p->next->prev = p->prev;
free(p);
p=NULL;
L->len--;
return 0;
}
3.双向循环链表尾删
//双向循环链表尾删
int DeleteRear(loopdoublelink L)
{
if(L==NULL || L->next==L)
return -1;
loopdoublelink p = L->prev;
p->prev->next = L;
L->prev = p->prev;
free(p);
p=NULL;
L->len--;
return 0;
}
运行结果
zzy@zzy-vm:~/hqrj/struct/day5/33$ gcc *.c
zzy@zzy-vm:~/hqrj/struct/day5/33$ ./a.out
请输入元素的个数:5
请输入插入的元素:A
请输入插入的元素:B
请输入插入的元素:C
请输入插入的元素:D
请输入插入的元素:E
正向遍历
E D C B A
逆向遍历
A B C D E
------------------------------
头删一个后的链表结果为
正向遍历
D C B A
逆向遍历
A B C D
尾删一个后的链表结果为
正向遍历
D C B
逆向遍历
B C D