单链表查找最小值


1.首先我们要写出所需的头文件(这里直接把所有用的到的头文件放入def_com.h文件中,这样每次使用的时候直接写#include "def_com.h"头文件即可)

#include <stdio.h>
using namespace std;
#include <iostream>
#include <iomanip>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <process.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1

2.对我们所需的函数类型进行定义(这里也是放入一个头文件"def.h"中)

typedef int ElemType;
typedef int Status;

3.建立一个结构指针来描述变量

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

4.对链表进行内存分配,以及使用尾插法进行链表元素的输入(尾插法就是他的输入与输出结果是一样的,关键就在于p->next=e;p=e;语句,最后的p->next要指向NULL;而头插法就是他的输入与输出结果是相反的,关键在于e->next=p->next;p->next=e;)

LinkList Init_L(int n)
{
    LinkList L=(LinkList)malloc(sizeof(LNode));
    LinkList p=L;
    int x;
    printf("请输入链表元素:");
    for(int i=0;i<n;i++)
    {
        LinkList e=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&x);
        e->data=x;
        p->next=e;
        p=e;
    }
    p->next=NULL;
    L=L->next;
}

5.之后就是查找链表的最小值。就先设定一个LinkList型的变量p,然后使它指向L,再定义一个int型变量min,使它等于p的数值。然后利用循环,将不断改变的p位置的数值与min比较,对min重新赋值。等循环结束就输出最小值即可。

Status Found_L(LinkList L)
{
    int min;
    LinkList p=L;
    min=p->data;
    while(p){
        if(p->data <= min){
            min=p->data;
        }
        p=p->next;
    }
    L=L->next;
    printf("最小值为:%d\n",min);
}

总的代码就为:

#include "com_def.h"
#include "def.h"
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
LinkList Init_L(int n)
{
    LinkList L=(LinkList)malloc(sizeof(LNode));
    LinkList p=L;
    int x;
    printf("请输入链表元素:");
    for(int i=0;i<n;i++)
    {
        LinkList e=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&x);
        e->data=x;
        p->next=e;
        p=e;
    }
    p->next=NULL;
    L=L->next;
}
Status Found_L(LinkList L)
{
    int min;
    LinkList p=L;
    min=p->data;
    while(p){
        if(p->data <= min){
            min=p->data;
        }
        p=p->next;
    }
    L=L->next;
    printf("最小值为:%d\n",min);
}
int main()
{
    int n;
    printf("请输入链表元素个数:");
    scanf("%d",&n);
    LinkList L;
    L=Init_L(n);
    Found_L(L);
}

输出结果为:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM