【第四周项目2】建设“单链表”算法库

/*
Copyright (c)2017,烟台大学计算机与控制工程学院        
All rights reserved.        
文件名称:9.cpp      
作    者:尚文哲       
完成日期:2017年9月26日        
  
    
问题描述:按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。  
          这一周,建的是单链表的算法库。 算法库包括两个文件:   
         1.头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;   
        2.源文件:linklist.cpp,包含实现各种算法的函数的定义。   
        请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件(如main.cpp),  
          编制main函数,完成相关的测试工作。   
         测试工作可以采用“渐进”的思路,每次涉及的函数应该尽可能少。   
输入描述:若干数据 。      
程序输出:插入的节点数据。   
*/
(1)头文件LinkLIst.h  
#include<stdio.h>    
#include<malloc.h>    
typedef int ElemType;    
typedef struct node    
{    
 int data;    
 node *next;    
    
}linklist;    
void InitList( linklist *& );    
void ListInsert(linklist *,int ,int );    
void DispList(linklist *);    
void DestroyList(linklist*);    
void CreateListF(linklist *&,ElemType a[],int );    
void CreateListF(linklist *&,ElemType a[],int );   
  
(2)源文件linklist.cpp  
#include"LinkList.h"    
void InitList(linklist *&l)    
{    
        l = (linklist*)malloc(sizeof(linklist));    
        l->next = NULL;    
}    
void ListInsert(linklist *l, int i, int e)    
{    
        linklist *p, *q;    
        int n = 0;    
        i--;    
        p = (linklist*)malloc(sizeof(linklist));    
        q = l;    
    
        while (l->next != NULL && n < i)    
        {    
                n++;    
                q = q->next;    
    
        }    
        if (l->next != NULL)    
        {    
    
                p->data = e;    
                p->next = q->next;    
                q->next = p;    
    
        }    
        if (l->next == NULL)    
        {    
                p->data = e;    
                p->next = l->next;    
                l->next = p;    
        }    
    
    
    
    
}    
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 *q, *p;    
        int i = 0;    
        q = l;    
        p = l;    
        q = q->next;    
        while (q->next != NULL)    
        {    
                free(p);    
                p = q;    
                q = q->next;    
        }    
        free(q);    
}    
void CreateListF(linklist *&L, ElemType a[], int n)    
{    
        linklist *p;    
        int i = 0;    
        L = (linklist *)malloc(sizeof(linklist));    
        L->next = NULL;    
        while (i < n)    
        {    
                p = (linklist *)malloc(sizeof(linklist));    
                p->data = a[i];    
                p->next = L->next;    
                L->next = p;    
                i++;    
        }    
}    
    
    
void CreateListR(linklist *&L, ElemType a[], int n)    
{    
        linklist *p, *q;    
        int i = 0;    
    
        L = (linklist *)malloc(sizeof(linklist));    
        L->next = NULL;    
        q = L;    
        while (i < n)    
        {    
                p = (linklist *)malloc(sizeof(linklist));    
                p->data = a[i];    
                p->next = q->next;    
                q->next = p;    
                q = p;    
                i++;    
        }    
    
}    
  
  
(3)main函数main.cpp  
  
#include"LinkList.h"    
int main()    
{    
        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;    
}    




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值