⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlnode.h

📁 《数据结构-使用C语言》第三版
💻 H
字号:

typedef struct  Node
{
    DataType  data;
    struct Node *prior;
    struct Node * next;
}DLNode;

void ListInitiate(DLNode **head) 
{
	if((*head=(DLNode*)malloc(sizeof(DLNode)))==NULL) return;
	
    (*head)->prior =*head;
    (*head)->next=*head;
}

int ListLength(DLNode *head)
{
    DLNode *q;
    int size;
    
    q=head;
    size=0;
    
    while(q->next!=head) //判断当前结点是不是最后一个结点 
    {
		q=q->next;  //指针先指向下一个节点后长度再加一 
        size++;
    }
    return size;
}

int ListInsert(DLNode *head,int i,DataType x)
{     
    DLNode  *p,*q;
	int j;
	
	
    p=head->next;
	j=0; 
     
	while(p!=head&&j<i)
    {
        p=p->next;
        j++;
    }
           
	if(j!=i)
    {
        printf("插入位置有误\n");
        return 0;
    }
            
	if((q=(DLNode*)malloc(sizeof(DLNode)))==NULL)
    return 0;
         
	q->data=x; 
    q->prior=p->prior;
    p->prior->next=q;
    p->prior=q;  
    q->next=p;
    
    return 1;
}
  
int ListDelete(DLNode *head,int i,DataType *x)
{
    DLNode  *p;
    int j;
      
    p=head->next;
    j=0;
      
    while(p->next!=head&&j<i)
    {
        p=p->next;
        j++;
    }
    if(j!=i)
    {
        printf("删除位置有误\n");                                                    
        return 0;
    }
    
    p->prior->next= p->next ;
    p->next->prior=p->prior;
    *x=p->data;
    free(p);
    
    return 1;
}

int ListGet(DLNode *head,int i,DataType *x)
{   
	DLNode *p;
	int j;
	
    p=head;
    j=0;
    while(p->next!=head&&j<i)
    {
        p=p->next;
        j++;
    }
    
    if(j!=i)
    {
		printf("取元素位置出错\n");
		return 0;
    }
  
    *x=p->data;
	return 1;
}

void ListDestory(DLNode **head)
{
	DLNode *p,*q;	
	int i,n;
	
    p=*head;
    n=ListLength(*head);
    for(i=0;i<=n;i++)
    {
        q=p;
        p=p->next;
        free(q);
   }
   *head=NULL;//撤消后 头指针还要置空 
}        

void ListPrintPrior(DLNode *head)
{
	DLNode *p;
	
	p=head->prior;
	while(p!=head)
	{
		printf("%d ",p->data);
		p=p->prior;
	}
	printf("\n");
}

void ListPrintNext(DLNode *head)
{
	DLNode *p;
	
	p=head->next;
	while(p!=head)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
}                                           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -