zoukankan      html  css  js  c++  java
  • 双向循环链表

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h> 
    typedef int Status;
    typedef float ElemType;
    typedef struct DuLNode{
    	ElemType data;
    	struct DuLNode *prior,*next;
    }DuLNode,*DuLinkList;
    //函数的声明
    Status Creat_DuL(DuLinkList &head);//链表的创建注意:引号 
    void Print_DuL(DuLinkList head);//链表元素的输出 
    DuLinkList GetElem_DuL(DuLinkList L,Status i);//得到i的位置 
    Status ListInsert_DuL(DuLinkList &head,Status i,ElemType e);//插入
    
     
    Status Creat_DuL(DuLinkList &head)//链表的创建 
    {
    	DuLinkList p,q;
    	Status i=0,j;
    	head=(DuLinkList)malloc(sizeof(DuLNode));
    	head->next=head->prior=NULL;
    	p=head;
    	printf("请输入节点数:
    "); 
    	scanf("%d",&j);
    	for(i=0;i<j;i++)
    	{
    		q=(DuLinkList)malloc(sizeof(DuLNode));
    		scanf("%f",&q->data);
    		p->next=q;
    		q->prior=p;
    		p=q;
    	}
    	p->next=head;
    	head->prior=p;
    
    } 
    void Print_DuL(DuLinkList head)//链表元素的输出 
    {
    	DuLinkList p;
    	p=head->next;
    	while(p!=head)
    	{
    		printf("%f ",p->data);
    		p=p->next;
    	}
    }
    Status ListInsert_DuL(DuLinkList &head,Status i,ElemType e)
    {
    	//在带头结点的双链循环表中第i个位置之前插入元素e
    	//i的合法值为1<=i<=表长+1
    	DuLinkList p,s;
    	if(!(p=GetElem_DuL(head,i)))//在L中确定插入位置 
    	{
    		return 0; 
    	}
    	if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
    	{
    		return 0;
    	} 
    	s->data=e;
    	s->prior=p->prior;
    	p->prior->next=s;
    	s->next=p;
    	p->prior=s;
    	return 0;
    	
    } 
    
    
    DuLinkList GetElem_DuL(DuLinkList L,Status i)
    {
    	DuLinkList p;
    	int j=0;
    	p=L->next;
    	while(p!=L && j<i-1)
    	{
    		p=p->next;
    		j++;
    	}
    	if(p==p->next || j>i-1)
    	{
    		return 0;
    	}
    		
    	
    	return p;
    }
    Status ListDelete_DuL(DuLinkList &head,Status i,ElemType &e)
    {
    	DuLinkList p;
    	//删除带头结点的双链循环线性表的第i给元素i的合法值i<=i<=表长
    	if(!(p=GetElem_DuL(head,i)))//在L中确定第i个元素的位置指针p 
    	{
    		return 0;//p=NULL即第i个元素不存在 
    	} 
    	e=p->data;
    	p->prior->next=p->next;
    	p->next->prior=p->prior;
    	free(p);
    	return 0; 
    }
    int main(int argc, char** argv) 
    {
    	DuLinkList head;
    	ElemType e;
    	 
    	 
    	//测试程序不规范请自己去调试 
    	Creat_DuL(head);
    	Print_DuL(head);
    	printf("
    ");
    	printf("-----------------------------------
    ");
    	ListInsert_DuL(head,1,2.3);
    	Print_DuL(head);
    	printf("
    ");
    	printf("-----------------------------------
    ");
    	ListDelete_DuL(head,1,e);
    	Print_DuL(head);
    	return 0;
    }
    别废话,拿你代码给我看。
  • 相关阅读:
    Snuke's Subway Trip
    codevs 1606 台阶
    COGS 2334. [HZOI 2016]最小函数值
    codevs 1052 地鼠游戏
    洛谷 P1091 合唱队形
    洛谷 P1376 机器工厂
    codevs 2618 核电站问题
    vijos 1524 最小监视代价
    洛谷 P1690 贪婪的Copy
    51nod 1135 原根
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707582.html
Copyright © 2011-2022 走看看