第4周项目2- 建设“单链表”算法库

/*Copyright (c) 2015, 烟台大学计算机与控制工程学院       
* All rights reserved.       
* 文件名称:H1.cpp       
* 作者:辛志勐       
* 完成日期:2015年9月25日       
* 版本号:vc6.0       
* 问题描述:按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。  
* 输入描述:无       
* 程序输出:链表的结果       
*/ 

 

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

typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
}LinkList;

void InitList(LinkList *&L);  //初始化线性表
void DestroyList(LinkList *&L);  //销毁线性表
bool ListEmpty(LinkList *L);  //判断线性表是否为空
void DispList(LinkList *L);  //输出线性表
bool ListDelete(LinkList *&L,int i,ElemType &e);  //删除数据元素
bool ListInsert(LinkList *&L,int i,ElemType e);

 

void InitList(LinkList *&L)
{
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
}
void DestroyList(LinkList *&L)
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);    //此时q为NULL,p指向尾结点,释放它
}
bool ListEmpty(LinkList *L)
{
    return(L->next==NULL);
}

void DispList(LinkList *L)
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}


bool ListInsert(LinkList *&L,int i,ElemType e)
{
    int j=0;
    LinkList *p=L,*s;
    while (j<i-1 && p!=NULL) //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)    //未找到位序为i-1的结点
        return false;
    else            //找到位序为i-1的结点*p
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*s
        s->data=e;
        s->next=p->next;                        //将*s插入到*p之后
        p->next=s;
        return true;
    }
}

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;
}
第4周项目2- 建设“单链表”算法库_第1张图片

知识点总结:函数调试应用,考察线性表各种应用的掌握情况。

学习心得:线性表的学习已经有三个周了,目前只满足于看懂,实践中如果没有老师的解析,自己很难知道该怎么去做。

你可能感兴趣的:(第4周项目2- 建设“单链表”算法库)