第四周项目3-单链表的应用逆置_Esther1012的博客-程序员秘密

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

 

typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
}LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L);  //初始化线性表
void DestroyList(LinkList *&L);  //销毁线性表
bool ListEmpty(LinkList *L);  //判断线性表是否为空
int ListLength(LinkList *L);  //求线性表长度
void DispList(LinkList *L);  //输出线性表
bool GetElem(LinkList *L,int i,ElemType &e);  //求线性表某个数据元素值
int LocateElem(LinkList *L,ElemType e);  //按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e);  //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e);  //删除数据元素


void Reverse(LinkList *&L)
{
    LinkList *p=L->next,*q;
    L->next=NULL;
    while (p!=NULL)     //扫描所有的结点
    {
        q=p->next;      //让q指向*p结点的下一个结点
        p->next=L->next;    //总是将*p结点作为第一个数据结点
        L->next=p;
        p=q;            //让p指向下一个结点
    }

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->data=a[i];
        s->next=L->next;            //将*s插在原开始结点之前,头结点之后
        L->next=s;
    }
}

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];
        r->next=s;          //将*s插入*r之后
        r=s;
    }
    r->next=NULL;           //终端结点next域置为NULL
}

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);
}
int ListLength(LinkList *L)
{
    LinkList *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkList *L)
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L;
    while (j<i && p!=NULL)
    {
        j++;
        p=p->next;
    }
    if (p==NULL)            //不存在第i个数据结点
        return false;
    else                    //存在第i个数据结点
    {
        e=p->data;
        return true;
    }
}
int LocateElem(LinkList *L,ElemType e)
{
    LinkList *p=L->next;
    int n=1;
    while (p!=NULL && p->data!=e)
    {
        p=p->next;
        n++;
    }
    if (p==NULL)
        return(0);
    else
        return(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;
    }
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L,*q;
    while (j<i-1 && p!=NULL)    //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)                //未找到位序为i-1的结点
        return false;
    else                        //找到位序为i-1的结点*p
    {
        q=p->next;              //q指向要删除的结点
        if (q==NULL)
            return false;           //若不存在第i个结点,返回false
        e=q->data;
        p->next=q->next;        //从单链表中删除*q结点
        free(q);                //释放*q结点
        return true;
    }
}

int main()
{
    LinkList *L;
    ElemType a[]= {1,3,5,7, 2,4,8,10};
    CreateListR(L,a,8);
    printf("L:");
    DispList(L);
    Reverse(L);
    printf("逆置后L: ");
    DispList(L);
    DestroyList(L);
    return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Esther1012/article/details/48915209

智能推荐

css 滚动样式_autm许的博客-程序员秘密

::-webkit-scrollbar {width : 8px;height: 8px;overflow: visible;}::-webkit-scrollbar-thumb {border-radius: 10px;background: #d4d4d4;min-height: 25px;min-width: 25px;cursor: pointer;}::-webkit-scrollbar-track {background : #f7f7f7;}

python3.7成功换虚拟环境python3.6_python切换到虚拟环境_Python小丸子.的博客-程序员秘密

因为我们要创建一个python3.6的虚拟环境,所以在anaconda prompt终端输入conda create -n Py36 python=3.6;选择y,最后出现done,创建成功。base是我的基本环境,TensorFlow是我创建的虚拟环境。选择我们刚刚创建的虚拟环境py36里面的python.exe。查看一下 然后我们打开envs,出现我们刚刚创建的py36。在图中可以看出我们原来的基础环境为python3.7,点击红框里面的...三个点进行设置。出现此界面,我们点击create。

集成Swagger在线调试_weixin_30955341的博客-程序员秘密

SpringBoot是为了简化Spring应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。前端和...

DES加密解密_无法预知的博客-程序员秘密

自己留着,解释如下package com.jicheng.android.project.utils;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExcep

IntelliLock_gnicky的博客-程序员秘密

http://www.eziriz.com/Its flexible managed concept allows you full licensing integrationinto any existing system. IntelliLock supports the .NET Framework 1.1, 2.0, 3.0, 3.5, 4.0 and 4.5. T

随便推点

Mac m1安装jdk1.6_mac安装jdk1.6_張cccccy的博客-程序员秘密

按照网上教程可以成功安装jdk1.6,java -version也能看到版本,但javac乱码而且在项目中也不能用,有没有大佬遇到相同问题,求解决方案

【bzoj 3073】Journeys(线段树优化建图)_zP1nG的博客-程序员秘密

传送门biu~ 线段树的每个节点代表一个区间,建两棵线段树。 出线段树每个点向父节点连边0,表示如果能从这个区间出发也就可以从父区间出发。入线段树每个点向子节点连边0,表示如果能到达这个区间也就可以到达子区间。 入线段树每个点向出线段树的平行结点连边0,表示如果能到达这个区间也可以从这个区间出发。 在线段树上跑最短路,到叶子节点的路径长即为最短路径。#include<bits/stdc+

摄像机畸变校正及代码实现_gfx521的博客-程序员秘密

摄像机镜头畸变校正参数获得及使用基本原理径向畸变 切向畸变 摄像机矩阵 畸变参数和摄像机矩阵获得需要获得摄像机内部参赛矩阵和畸变参数,有两个方法 1) OpenCV http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html 2) GML Camera Cal

Python实现读取Excel指定单元格并重新写入已存在的Excel指定的单元格_python 读取单元格的值,修改后重新写入单元格_杨鑫newlfe的博客-程序员秘密

# -*- coding:utf-8 -*-__author__ = 'yangxin_ryan'from openpyxl import load_workbookimport openpyxlclass ExcelRewrite(object): def run(self, input_path, input_sheet_index, read_range, outpu...

php 框架_medoo 读写分离_日积月累@海纳百川的博客-程序员秘密

概述PHP作为网络开发的强大语言之一,具有开放源代码,跨平台性强,开发快捷,效率高,面向对象,专业专注等诸多优点。各种PHP开发框架也让程序开发变的简单有效。基本信息中文名称:PHP框架                         属 于:网络开发的强大语言之一特 点:具有开放源代码,跨平台性强      基 于:mvc架构模式相关框架:thinkphp lar

推荐文章

热门文章

相关标签