/***依次输出链表中的各个结点***/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
LNode *next; //结点的指针域
} LNode, *LinkList;//头指针
//后插法创建链表算法
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 sum1(LinkList p) {//方法1
if (p == NULL)
return 0; //递归终止
else {
return p->data+sum1(p->next); //p指向后继指点继续递归
}
}
int sum=0;
int sum2(LinkList p) {//方法2
if (p == NULL)
return sum; //递归终止
else {
sum=sum+p->data;
sum2(p->next); //p指向后继指点继续递归
}
}
void sum3(LinkList p,int& sum) {//方法3
if (p == NULL)
return ; //递归终止
else {
sum=sum+p->data;
sum3(p->next,sum); //p指向后继指点继续递归
}
}
int len=0;
int length(LinkList p){
if(p == NULL) return len;
else{
len++;
length(p->next);
}
}
int searchMax(LinkList p){
int max;
if(p->next==NULL)
return p->data;
else
{
max=searchMax(p->next);
return p->data>=max?p->data:max;
}
}
int main() {
int n,sum=0;
LinkList L;
cout << "请输入元素个数:" << endl;
cin >> n;
cout << "请输入链表元素(以空格隔开,按回车结束):" << endl;
CreateList_L(L, n); //后插法创建链表算法
cout << "链表中的元素依次为:" << endl;
TraverseList(L->next);
cout << endl;
cout<<"链表中的数据总和:"<<sum1(L->next)<<endl;
cout<<"链表中的数据总和:"<<sum2(L->next)<<endl;
sum3(L->next,sum);
cout<<"链表中的数据总和:"<<sum;
cout << endl;
cout << "链表中的节点长度:"<<length(L->next)<<endl;
cout << "链表中的最大数据是:"<<searchMax(L->next)<<endl;
return 0;
}
08-13
7853
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-18
3054
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-23
1888
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交