第四周 项目3 【单链表应用1】

来源:互联网 发布:魅族手机怎么关4g网络 编辑:程序博客网 时间:2024/05/22 15:50
/*       Copyright (c)2016,烟台大学计算机与控制工程学院       All rights reserved.       文件名称:项目3--单链表应用(1).cpp       作    者:李潇      完成日期:2016年9月18日       版 本 号:v1.0              问题描述:1、设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,           即第一个结点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。 输入描述:若干数据 。     程序输出:链表中的数据及逆序拍好后的数据。  */  //主函数main.cpp的代码#include<iostream>using namespace std;#include<stdio.h>#include"list.h"int main(){    LinkList *L;    ElemType a[8]= {1,3,4,6,8,9,10,7};    CreateListR(L,a,8);    printf("L:");    DispList(L);    Reverse(L);    printf("逆置后L: ");    DispList(L);    DestroyList(L);    return 0;}//头文件list.h的代码#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED#include<stdio.h>#include<malloc.h>typedef int ElemType;//int类型 运用typedef方便快捷typedef struct LNode{    ElemType data;    struct LNode *next;//定义单链表节点类型}LinkList;void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表void DispList(LinkList *L);//输出线性表void DestroyList(LinkList *&L); //销毁线性表void Reverse(LinkList *l);#endif // LIST_H_INCLUDED//函数实现list.cpp的代码#include"list.h"void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表{   LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点    L->next=NULL;    r=L;                    //r始终指向终端结点,开始时指向头结点    for (i=0; i<n; i++)//循环建立数据节点    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];            //创建数据结点*s        r->next=s;          //将*s插入*r之后        r=s;    }    r->next=NULL;           //终端结点next域置为NULL}void DispList(LinkList *L)//输出线性表{     LinkList *p=L->next;//p指向开始节点    while (p!=NULL)//p不为NULL,输出*p节点的data域    {        printf("%d ",p->data);        p=p->next;//p移向下一个节点    }    printf("\n");}void DestroyList(LinkList *&L) //销毁线性表{   LinkList *pre=L,*p=L->next;//pre指向*p的前驱节点    while (p!=NULL)//扫描单链表L    {        free(pre);//释放*pre节点        pre=p;    //pre 、p同步后移一个单位        p=pre->next;    }    free(pre);//循环结束后,p为NULL,pre指向尾节点,释放它}void Reverse(LinkList *l){    LinkList *p,*q;    p=l->next;    l->next=NULL;    while(p!=NULL)    {        q=p->next;        p->next=l->next;        l->next=p;        p=q;    }}运行结果:
<img src="http://img.blog.csdn.net/20160918162236157?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />知识点总结:根据头插法尾差法的特点完成链表逆载心得体会:加深了对单链表的尾差法和头插法的理解和应用

0 0
原创粉丝点击