第4周 项目1 - 建立单链表

问题及代码:

/*
 *Copyright(c) 2015,烟台大学计算机与控制工程学院
 *All rights reserved.
 *文件名称:test.cpp
 *作    者:徐群壮
 *完成日期:2015.9.21
 *版 本 号:v1.0
 *问题描述:使用头插法和尾插法建立单链表。并输出结果
*/
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
    ElemType date;
    struct LNode *next;
}LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n) //头插法建立单链表
{
    LinkList *s;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));
    L->next=NULL;
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        s->date=a[i];
        s->next=L->next;
        L->next=s;
    }
}
void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建立单链表
{
    LinkList *s,*r;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));
    r=L;
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        s->date=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void DispList(LinkList *&L)   //输出单链表
{
    LinkList *p=L->next;
    while(p!=NULL)
    {
        cout<<p->date<<' ';
        p=p->next;
    }
    cout<<endl;

}
void DestroyList(LinkList *&L)  //销毁单链表
{
    LinkList *pre=L,*p=L->next;
    while(p!=NULL)
    {
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);
}
int main()
{
    LinkList *L1,*L2;
    ElemType a[8]={7,9,8,2,0,4,6,3};
    CreateListF(L1,a,8);
    cout<<"头插法建表结果:"<<endl;
    DispList(L1);
    CreateListR(L2,a,6);
    cout<<"尾插法建表结果:"<<endl;
    DispList(L2);
   // DestroyList(L1);
    //DestroyList(L2);
}

运行结果:

第4周 项目1 - 建立单链表_第1张图片

知识点总结及学习心得:

①在用尾插法建立单链表时,在函数定义时,需要比头插法建立单链表多定义一个linklist的指针。因为在用尾插法时。往后移动不能用L。负责就会找不到头节点。所以在一开始需要定义一个r=L。用r来代替。这是非常重要的

②在输出单链表DispList函数中,一直不想用p指针来记住位置。只想用L来实现。如果在后续的程序中不再用此链表是可以的。可以把输出单链表的函数改为

    L=L->next;
    while(L!=NULL)
    {
        cout<<L->date<<' ';
        L=L->next;
    },但之后所有有关此线性表的函数就都不能用了。所以还是支持用p指针来记住头节点的下一个节点。

你可能感兴趣的:(第4周 项目1 - 建立单链表)