第4周项目2

/* 
烟台大学计算机学院 
 
文件名称:xm.cpp 
 
作者:于琛 
 
完成日期:2017年9月24日 
 
问题描述:建立单链表算法库
 
输入描述:无
 
输出描述:进行了各个的链表的值
 
*/ 



list.cpp:



#include <stdio.h>
#include <malloc.h>
#include "list.h"
void initList(Linklist *&L)//初始化链表
{
    L=(Linklist *)malloc(sizeof(Linklist));//动态开辟内存
    L->next=NULL;//链表为空
}

bool ListInsert(Linklist *&L,int i,ElemType e)//链表插入
{
    int j=0;

    Linklist *p=L,*s;

    if(i<=0)//输入的i比0小不合法
    {
        return false;

    }

    while(j<i-1 && p!=NULL)//遍历
    {
        j++;

        p=p->next;
    }

    if(p==NULL)//未找到i-1位置结点
    {
        return false;
    }

    else//找到
    {

        s=(Linklist *)malloc(sizeof(Linklist));

        s->data=e;

        s->next=p->next;

        p->next=s;//插入操作

        return true;
    }
}

void DispList(Linklist *L)//输出链表的元素值
{
    Linklist*p=L->next;

    while(p!=NULL)//输出+遍历
    {
        printf("%d ",p->data);

        p=p->next;

    }

    printf("\n");
}


void  DestroyList(Linklist *&L)//销毁链表
{
    Linklist *pre=L,*p=L->next;

    while(p!=NULL)
    {
        free(pre);

        pre=p;

        p=pre->next;
    }
    free(pre);
}
void  CreateListF(Linklist *&L,ElemType a[],int n)
{
    Linklist *s;

    L=(Linklist *)malloc(sizeof(Linklist));//动态开辟内存空间

    L->next=NULL;

    for(int i=0;i<n;i++)//头插法
    {
        s=(Linklist *)malloc(sizeof(Linklist));
        s->data=a[i];
        s->next=L->next;
        L->next=s;
    }
}

void  CreateListR(Linklist *&L,ElemType a[],int n)//尾插法
{
     Linklist *s,*r;

     L=(Linklist *)malloc(sizeof(Linklist));

     r=L;

     for(int i=0;i<n;i++)//尾插法
     {
         s=(Linklist *)malloc(sizeof(Linklist));

         s->data=a[i];

         r->next=s;

         r=s;

     }
    r->next=NULL;
}



bool ListDelete(Linklist *&L,int i,ElemType &e)//删除链表元素
{

    int j=0;

    Linklist *p=L,*q;

    if(i<=0)return false;

    while(j<i-1 && p!=NULL)//找到i的前一节点i-1
    {
        j++;

        p=p->next;
    }
    if(p==NULL)//p为空,未找到元素
    {
        return false;
    }

    else
    {
        q=p->next;
        if(q==NULL)//未找到元素
        {
            return false;
        }
        e=q->data;//删除的元素保留到e

        p->next=q->next;

        free(q);

        return true;
    }
}



main:

#include <stdio.h>
#include <malloc.h>
#include "list.h"


int main()
{
    Linklist *L1,*L2;

    ElemType a[8]={7,9,8,2,0,4,6,3};

    printf("头插法建表结果:");

    CreateListF(L1,a,8);

    DispList(L1);

    printf("尾插法建表结果:");

    CreateListR(L2,a,8);

    DispList(L2);

    DestoryList(L1);

    DestoryList(L2);

    int b;

    Linklist *L3;

    CreateListR(L3,a,8);

    ListDelete(L3,4,b);

    printf("删除a数组中的元素:");
    printf("%d\n",b);
    DispList(L3);







  printf("插入验证:");
  Linklist*L;
  initList(L);
  ListInsert(L,1,15);
  ListInsert(L,1,10);
  ListInsert(L,1,5);
  ListInsert(L,1,20);
  DispList(L);
  DestroyList(L);
 return 0;
}

list.h:

#include <stdio.h>
#include <malloc.h>
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;

typedef struct LNode
{
    ElemType data;

    struct LNode *next;
}Linklist;
void initList(Linklist *&L);//初始化链表
bool ListInsert(Linklist *&L,int i,ElemType e);//链表插入
void DispList(Linklist *L);//输出
void  DestroyList(Linklist *&L);//销毁
void  CreateListF(Linklist *&L,ElemType a[],int n);//头插法
void  CreateListR(Linklist *&L,ElemType a[],int n);//尾插法
bool ListDelete(Linklist *&L,int i,ElemType &e);//元素删除




运行结果:


学习心得:

学会了建立链表算法库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值