您的位置:首页 > 其它

Insert & delte elements in doublely linked list

2015-10-18 11:49 801 查看
Define a doublely linked list

typedef struct Node{
ElemType data;
struct Node* prior;
struct Node* next;
}Node, *DLinkList;


Initialize it, insert at the end

1.创建新节点,作为头结点;

2,根据输入不断创建实体节点;

DLinkList DLinkListCrate()
{
Node *p,*L,*tempNode;  // 后面有malloc,所以这样定义方便  或者DLinkList P
L = (Node*) malloc(sizeof(Node));
L.prior = NULL;
*p = L;                //如果是定义DLinkList P,此处 P= L;
Element  x;
while(scanf("%d,&x") != EOF)
{
tempNode = (Node*)malloc(sizeof(Node));
tempNode.data = x,
tempNode->prior = p;
p->next = tempNode;
tempNode->next = NULL;
p = tempNode;
}
return L;
}


Find Operation

根据值找到节点, retrun

int DLinkListFind(DLinkList L, ElemType x)
{
if(L == NULL)
return 0;
DLinkList p;
p = L->next;
int i=0;
while(p != NULL){
i++;
if(p->next == x)   return i;
p = p->next;
}
return 0;
}


Delete Operation

1. 找到要删除的点

2. 如果是末尾点,只需把前指针置空;

3.如果是中间指针,前后指针各向原来方向延伸一格。

int DLinkListDelete(DLinkList L, int i)
{
if( NULL == L)
return 0;
DLinkList p;
p = L->next;
int  j =0;
while(j < i && p != NULL)   p = p->next;
if(p == NULL)  return;
else if(p->next == NULL){
p->prior->next  = NULL;
free(p);
}
else{
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
}
}


Insert Operation
1.找到位置i;

2.创建一个新节点,插入。

DLinkList DLinkListInsert(DLinkList L, int i, ElemType x)
{
if(NULL == L)
return;
DLinkList p;
p = L->next;
int  j = 0;
while(j < i )  p = p->next;
tempNode = (Node*)malloc(sizeof(Node));
p->next->prior = tempNode;
tempNode->next = p->next;
p->next = tempNode;
tempNode->prior = p;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: