阅读背景:

双向链表的初始化删除及其插入操作

来源:互联网 
#include<stdio.h>
#include<stdlib.h>
typedef struct RRlist{
      int data;
      RRlist *prior;
      RRlist *next;
}RRlist,*RRRlist;
typedef struct sqlist{
      RRRlist tail;
      int length;
}sqlist,*ssqlist;
void Init_list(ssqlist H)
{
      int count,data,i;
      RRRlist p;
      H->tail=0;
      H->length=0;
      printf("Scanf the mount of nodes\n");
      scanf("%d",&count);
      if(!count)
            exit(0);
      p=(RRRlist)malloc(sizeof(RRlist));
      if(!p)
            exit(0);
      scanf("%d",&data);
      p->data=data;
      p->next=p;
      p->prior=p;
      H->tail=p;
      H->length++;
      for(i=1;i<count;i++)
      {
            p=(RRRlist)malloc(sizeof(RRlist));
            if(!p)
                  exit(0);
            scanf("%d",&data);
            p->data=data;
            p->next=H->tail;
            p->prior=H->tail->prior;
            H->tail->prior->next=p;
            H->tail->prior=p;
            H->length++;
      }
}
void Insert_list(ssqlist H,int i,int e,int flag)//search from tail to tail
{
      int j;
      RRRlist p,q;
      if(i<1||i>H->length+1)
            exit(0);
      p=(RRRlist)malloc(sizeof(RRlist));
      if(!p)
            exit(0);
      p->data=e;
      q=H->tail;
      if(flag)
      {
            for(j=0;j<i-2;j++)
            {
                  q=q->prior;
            }
            p->next=q;
            p->prior=q->prior;
            q->prior->next=p;
            q->prior=p;
            H->length++;
      }
      else
      {
            for(j=0;j<i;j++)
            {
                  q=q->prior;
            }
            p->next=q->next;
            p->prior=q;
            q->next->prior=p;
            q->next=p;
            H->length++;
      }
}
void display(ssqlist H,int dirction)//the direction stand for the search direction
{
      int i;
      RRRlist p;
      p=H->tail;
      printf("%d ",p->data);
      if(dirction)
      {
            p=p->next;
            while(p!=H->tail)
            {
                  printf("%d ",p->data);
                  p=p->next;
            }
            printf("\n");
      }
      else
      {
            p=p->prior;
            while(p!=H->tail)
            {
                  printf("%d ",p->data);
                  p=p->prior;
            }
            printf("\n");
      }
}
void delet_list(ssqlist H,int i,int *e)
{
      int j;
      RRRlist p;
      p=H->tail;
      if(i<1||i>H->length)
            exit(0);
      for(j=0;j<i-1;j++)
      {
            p=p->prior;
      }
      *e=p->data;
      p->prior->next=p->next;
      p->next->prior=p->prior;
      if(p==H->tail)
      {
            H->tail=p->prior;
      }
      H->length--;
      free(p);
}
int main()
{
      int e;
      sqlist H;
      Init_list(&H);
      display(&H,0);
      Insert_list(&H,4,100,1);
      display(&H,0);
      delet_list(&H,4,&e);
      display(&H,0);
      printf("%d \n",e);
      return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef st



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: