Insert & delte elements in doublely linked list

来源:互联网 发布:按option无法切换mac 编辑:程序博客网 时间:2024/05/20 14:20

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;}



0 0
原创粉丝点击