/***依次输出链表中的各个结点***/
#include<iostream>
using namespace std;
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList;//头指针
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList;//头指针
/*void CreateList_L(LinkList &L,int n){ //算法2.10 前插法创建单链表
//逆位序输入n个元素的值,建立到头结点的单链表L
LNode *p;
L=new LNode;
L->next=NULL; //先建立一个带头结点的空链表
cout<<"请输入 "<<n<<" 个数:\n";
for(int i=n;i>0;--i){
p=new LNode; //生成新结点
cin>>p->data; //输入元素值
p->next=L->next;L->next=p; //插入到表头
}
}*/ //CreateList_F
//逆位序输入n个元素的值,建立到头结点的单链表L
LNode *p;
L=new LNode;
L->next=NULL; //先建立一个带头结点的空链表
cout<<"请输入 "<<n<<" 个数:\n";
for(int i=n;i>0;--i){
p=new LNode; //生成新结点
cin>>p->data; //输入元素值
p->next=L->next;L->next=p; //插入到表头
}
}*/ //CreateList_F
//后插法创建链表算法
void CreateList_L(LinkList &L, int n) {
L = new LNode;
L->next = NULL;
LNode *p, *r;
r = L;
for (int i = 0; i < n; i++) {
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void CreateList_L(LinkList &L, int n) {
L = new LNode;
L->next = NULL;
LNode *p, *r;
r = L;
for (int i = 0; i < n; i++) {
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
//算法3.9 遍历输出链表中各个结点的递归算法
void TraverseList(LinkList p) {
if (p == NULL)
return ; //递归终止
else {
cout << p->data << endl; //输出当前结点的数据域
TraverseList(p->next); //p指向后继指点继续递归
}
}
int Max(LinkList p)
{
int max;
if(p->next==NULL)
return p->data;
else
{
max=Max(p->next);
return p->data>=max?p->data:max;
}
}
void TraverseList(LinkList p) {
if (p == NULL)
return ; //递归终止
else {
cout << p->data << endl; //输出当前结点的数据域
TraverseList(p->next); //p指向后继指点继续递归
}
}
int Max(LinkList p)
{
int max;
if(p->next==NULL)
return p->data;
else
{
max=Max(p->next);
return p->data>=max?p->data:max;
}
}
int main() {
int n;
LinkList L;
//InitList(L);
cout << "请输入元素个数:" << endl;
cin >> n;
cout << "请输入链表元素(以空格隔开,按回车结束):" << endl;
CreateList_L(L, n); //后插法创建链表算法
cout << "链表中的元素依次为:" << endl;
TraverseList(L->next);
cout << endl;
cout<<"最大值为:";
cout<<Max(L->next)<<endl;
cout<<endl;
return 0;
}
int n;
LinkList L;
//InitList(L);
cout << "请输入元素个数:" << endl;
cin >> n;
cout << "请输入链表元素(以空格隔开,按回车结束):" << endl;
CreateList_L(L, n); //后插法创建链表算法
cout << "链表中的元素依次为:" << endl;
TraverseList(L->next);
cout << endl;
cout<<"最大值为:";
cout<<Max(L->next)<<endl;
cout<<endl;
return 0;
}