您的位置:首页 > 其它

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

2015-09-21 18:19 330 查看
问题及代码:

/*
*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);
}


运行结果:



知识点总结及学习心得:

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

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

    L=L->next;

    while(L!=NULL)

    {

        cout<<L->date<<' ';

        L=L->next;

    },但之后所有有关此线性表的函数就都不能用了。所以还是支持用p指针来记住头节点的下一个节点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: