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); }
输出结果为: