單鏈表查找最小值


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