zoukankan      html  css  js  c++  java
  • 数据结构与算法之单链表

    单链表

    #include <stdio.h>
    #include <malloc.h>
    #define MaxSize 100
    typedef int  Elemtype;
    typedef struct LNode  
    {
    	Elemtype date;
    	struct LNode *next;		
    } LinkNode;	
    				
    void CreateListF(LinkNode *&L,Elemtype a[],int n)    //头插法建立单链表
    {
    	LinkNode *s;int i; 
    	L=(LinkNode *)malloc(sizeof(LinkNode));  	
    	L->next=NULL;
    	for (i=0;i<n;i++)
    	{	
    		s=(LinkNode *)malloc(sizeof(LinkNode));
    		s->date=a[i];
    		s->next=L->next;			
    		L->next=s;
    	}
    }
    
    void InitList(LinkNode *&L)
    {
    	L=(LinkNode *)malloc(sizeof(LinkNode));  	//初始化单链表 
    	L->next=NULL;
    }
    
    void DestroyList(LinkNode *&L)       //释放单链表      
    {
    	LinkNode *pre=L,*p=pre->next;
    	while (p!=NULL)
    	{	free(pre);
    		pre=p;
    		p=pre->next;
    	}
    	free(pre);	
    }
    
    bool ListEmpty(LinkNode *L)  //判空 
    {
    	return(L->next==NULL);
    }
    
    int ListLength(LinkNode *L)  //求链表的长度 
    {
    	LinkNode *p=L;int i=0;
    	while (p->next!=NULL)
    	{	i++;
    		p=p->next;
    	}
    	return(i);
    }
    
    void DispList(LinkNode *L)  //输出链表         
    {
    	LinkNode *p=L->next;
    	while (p!=NULL)
    	{	printf("%d ",p->date);
    		p=p->next;
    	}
    	printf("
    ");
    }
    
    void UnionList1(LinkNode*LA,LinkNode*LB,LinkNode *&LC) //单链表二路归并算法 
    {
    	LinkNode *pa=LA->next,*pb=LB->next,*r,*s;
    	LC=(LinkNode *)malloc(sizeof(LinkNode));
    	r=LC;
    	while(pa!=NULL&&pb!=NULL)
    	{
    		if(pa->data<pb->data)
    		{
    			s=(LinkNode *)malloc(sizeof(LinkNode));
    			s->data=pa->data;
    			r->next=s;
    			r=s;
    			pa=pa->next;
    		}
    		else
    		{
    			s=(LinkNode*)malloc(sizeof(LinkNode));
    			s->data=pb->data;
    			r->next=s;
    			r=s;
    			pb=pb->next;
    		}
    	}
    	while(pa!=NULL)
    	{
    		s=(LinkNode*)malloc(sizeof(LinkNode));
    		s->data=pa->data;
    		r->next=s;
    		r=s;
    		pa=pa->next;
    	}
    	while(pb!=NULL)
    	{
    		s=(LinkNode*)malloc(sizeof(LinkNode));
    		s->data=pb->data;
    		r->next=s;r=s;
    		pb=pb->next;
    	}
    	r->next=NULL;
    } 
    bool ListInsert(LinkNode *&L,int i,Elemtype e)  //插入元素 
    {
    	int j=0;
    	LinkNode *p=L,*s;
    	if (i<=0) return false;			
    	while (j<i-1 && p!=NULL)		
    	{	j++;
    		p=p->next;
    	}
    	if (p==NULL)					
    		return false;
    	else							
    	{	s=(LinkNode *)malloc(sizeof(LinkNode));
    		s->date=e;
    		s->next=p->next;			
    		p->next=s;
    		return true;
    	}
    }
    
    bool ListDelete(LinkNode *&L,int i,Elemtype &e)//删除元素 
    {
    	int j=0;
    	LinkNode *p=L,*q;
    	if (i<=0) return false;		
    	while (j<i-1 && p!=NULL)	
    	{	j++;
    		p=p->next;
    	}
    	if (p==NULL)			
    		return false;
    	else					
    	{	q=p->next;				
    		if (q==NULL) 
    			return false;	
    		e=q->date;
    		p->next=q->next;		
    		free(q);				
    		return true;
    	}
    }
    
    int main()
    {
        LinkNode *LA;
        LinkNode *LB;
        LinkNode *LC;
        Elemtype a[MaxSize];
        Elemtype b[MaxSize];
        int n1; //第一个多项式位数 
        printf("请输入n1多项式的系数个数:");
        scanf("%d",&n1);
    	printf("请输入n1多项式的系数") 
    	for(int i=0;i<n1;i++)      //创建多项式n1
    	{
    		scanf("%d",a[i]);
    		
        } 
    	int n2; //第二个多项式位数 
        printf("请输入n2多项式的系数个数:");
        scanf("%d",&n2);
    	printf("请输入n2多项式的系数") 
    	for(int i=0;i<n2;i++)      //创建多项式n2 
    	{
    		scanf("%d",b[i]);
    		
        }           
        Elemtype e;
        InitList(LA);             //初始化链表
    	InitList(LB);
        printf("初始化完成
    ");
       
        
        CreateListF(L,a,5);                  //依次插入a,b,c,d,e
        printf("头插入元素后输出的链表为:
    ");
    
        DispList(LA);                        //输出链表LA
      
        DispList(LB);                        //输出链表LB
      
      
    
        DestroyList(LA);//释放链表LA
    	DestroyList(LB);//释放链表LB  
    	DestroyList(LC);//释放链表LC                     
        printf("释放全部链表");
        return 0;
    }
    
  • 相关阅读:
    《构建之法》心得体会
    简单工厂模式加减乘除器
    个人简介
    单元测试和代码覆盖率工具的使用
    Bookstore系统缺陷报告
    《构建之法读后感》
    3137102432_ 施少兵_ lab3
    3137102432_施少兵_实验2
    个人简介
    第六次作业:购物系统缺陷
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832380.html
Copyright © 2011-2022 走看看