目录
1.什么是双向链表
双向链表是在单链表的基础上,为每一个结点加一个前驱即可。
typedef struct Snode{
int data;
struct Snode *prior;
struct Snode *next;
}*List,list;
2.双向链表的整表创建
List clist()
{
int i;
int num,a;
List head = (List)malloc(sizeof(list));
List tail;
tail = head;
//head->prior = tail;
printf("input num:");
scanf("%d",&num);
while(i!=num)
{
List node = (List)malloc(sizeof(list));
scanf("%d",&a);
node->data = a;
node->next = head;
tail->next = node;
node->prior= tail;
tail = node;
head->prior = tail;
i++;
}
return head;
}
3.插入结点
List inode(List p,int l,int e)
{
int i;
List head;
head = p;
List m = (List)malloc(sizeof(list));
for(i=0;i<(l-1);i++)
{
head = head->next;
}
m->data = e;
m->next = head->next;
m->prior = head;
head->next->prior= m;
head->next = m;
return p;
}
4.删除结点
List dnode(List p,int l)
{
List head;
int i;
List remove;
head = p;
for(i=0;i<(l-1);i++)
{
head = head->next;
}
remove = head->next; //指向要删除的结点
head->next->next->prior = head;
head->next = head->next->next;
free(remove);
return p;
}
5.打印双向链表
int plist(List p)
{
List head;
head = p;
head = head->next;
do
{
printf("%d ",head->data);
head = head->next;
}while(head!=p);
return 0;
}
6.主函数
#include "stdio.h"
#include "stdlib.h"
typedef struct Snode{
int data;
struct Snode *prior;
struct Snode *next;
}*List,list;
int main()
{
List p;
p = clist();
plist(p);
p = inode(p,3,88);
plist(p);
p = dnode(p,3);
plist(p);
return 0;
}