单链表——递归求最大整数、节点个数、平均值

在原本单链表上进行增加

//"LinkList.h"
#include<iostream>
using namespace std;

#define ElemType int

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

string InitList(LinkList &L){
    L = new LNode;
    L->next = NULL;
    return "OK";
}

string ListInsert(LinkList &L,int i,ElemType e){
    LinkList P = L;
    int j=0;
    while (P && (j<i-1))
    {       
        P = P->next;++j;    
    }
    LinkList S = new LNode;
    S->data = e;
    S->next=P->next;
    P->next=S;
    return "OK";   
}

LNode* GetElement(LinkList L,int i){
    LinkList p = L->next;
    int j = 1;
    while(p && j<i){
        p=p->next;
        j++;
    }
    // if(!p||j>i){
    //     return -1;
    // }
    return p;
}

string DeleteList(LinkList &L,int i){
    LinkList p = L;
    int j = 0;
    while ((p->next)&&(j<i-1))
    {
        p=p->next;
        j++;
    }
    if(!(p->next)||(j>i-1))
        return "ERROR";
    LinkList q = p->next;
    p->next=q->next;
    delete q;
    return "OK";
    
}

string ShowList(LinkList L){
    LinkList p= L;
    while(p->next){
        p=p->next;
        cout<<p->data;
    }
    return "OK";
}

string FillList(LinkList &L){
    
    int p =1;
    char a = '1';
    while (a != '!')
    {
        ElemType b ;
        cin >> b;
        ElemType e = (ElemType)b - 48;
        a = b;
        if(a != '!')
            cout << ListInsert(L,p,b)<<endl;
        p++;
    }
 return "OK";
}
    
string FillListWithNum(LinkList &L,int i){
    
    int e;
    
    for(int j =1;j<=i;j++){
        cin >> e;
        ListInsert(L,j,e);
    }
 return "OK";
}

void max(LinkList L,ElemType &e){        //最大值
    if(!L) return;
    if(L->data > e) e = L->data;
    max(L->next,e);
}

void count(LinkList L,ElemType &n){        //个数
    if(!L) return;
    n++;
    count(L->next,n);    
}

void all(LinkList L,ElemType &al){      //总和
    if(!L) return;
    cout << L->data<<" ";
    al = al + L->data;
    all(L->next,al);    
}


int main(){
//     ShowList(L);
    LinkList L;
    InitList(L);FillListWithNum(L,8);
    ElemType e =0;
    max(L->next,e);
    cout << "the max is:"<<e<<endl;
    int num = 0;
    count(L->next,num);
    cout << "the number is: "<<num<<endl;
    int all1 = 0;
    all(L->next,all1);
    cout << "all is: " <<all1<<endl;
    cout << "the average is: " << all1/num <<endl;



// DeleteList(L,2);
// ShowList(L);
    system("pause");
    return 0;
}

 

posted @ 2020-11-20 17:31  倔强的不死人  阅读(2195)  评论(0编辑  收藏  举报