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); }
輸出結果為: