2020.10.07

一、今日学习内容

    学习了线性表的增删改查

#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100 
#define ERROR -1
#define OK 1
typedef int status;
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;
status InitList_L(LinkList &L){  //初始化
    L=new LNode;
    L->next=NULL;
    return OK;
}
status GetElem_L(LinkList L,int i,int &e){  //获取
    LinkList p;
    int j=1;
    p=L->next;
    while(p&&j<i){
        p=p->next;
        ++j;
    }
    if(!p||j>i)return ERROR;
    e=p->data;
    return OK;
}
status LocateElem_L(LinkList L,int e){   //查找值为e的元素
    LinkList p; 
    int j=1;
    p=L->next;
    while(p&&p->data!=e){
        p=p->next;
        j++;
    }
    return j;
}
status ListInsert_L(LinkList &L,int i,int e){  //插入
    LinkList p;
    p=L;int j=0;
    while(p&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)return ERROR;
    LinkList s=new LNode;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;
}
status ListDelete_L(LinkList &L,int i,int &e){  //删除
    LinkList p,q;
    p=L;int j=0;
    while(p->next&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p->next||j>i-1)return ERROR;
    q=p->next;
    p->next=q->next;
    e=q->data;
    delete q;
    return OK;
}
void CreateList_F1(LinkList &L,int n){  //前插法
    L=new LNode;
    L->next=NULL;
    for(int i=n;i>0;i--){
        LinkList p=new LNode;
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}
void CreateList_F2(LinkList &L,int n){  //尾插法
    L=new LNode;
    L->next=NULL;
    LinkList r,p;
    r=L;
    for(int i=0;i<n;i++)
    {
        p=new LNode;
        cin>>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}
status PrintList(LinkList &L){ //输出
    LinkList a = L->next ;
    while(a!=NULL){
        cout<<a->data<<"  ";
        a=a->next ;
    }
    cout<<endl;
    return OK ;
}
int main()
{
    LinkList L;
    InitList_L(L);
    int i,e,n,m;
    int f=1;
    do{
    cout<<"*******************************"<<endl;
    cout<<"             0.遍历            "<<endl;
    cout<<"             1.获取数据            "<<endl;
    cout<<"             2.获取位置            "<<endl;
    cout<<"             3.插入           "<<endl;
    cout<<"             4.删除         "<<endl;
    cout<<"             5.退出         "<<endl;
    cout<<"*******************************"<<endl;
    cout<<"请选择:";
    cin>>n;
    switch(n)
    {
    case 0:
        PrintList(L);
        break;
    case 1:
        cout<<"请输入你要获取第几个数据:";
        cin>>i;
        GetElem_L(L,i,e);
        cout<<"其数据为:"<<e<<endl;
        break;
    case 2:
        cout<<"请输入你要查找的数据:";
        cin>>e;
         if(LocateElem_L(L,e)!=0)
        {
            cout<<"该数在第"<<LocateElem_L(L,e)<<""<<endl;
        }
        break;
    case 3:
        if(!L->next){
            cout<<"请输入要插入的数据个数:";
            cin>>m;
            CreateList_F2(L,m);break;}
        if(L->next){
            PrintList(L);
            cout<<"请输入要插入的位置:";
            cin>>i;
            cout<<"请输入要插入的数据:";
            cin>>e;
            ListInsert_L(L,i,e);
        }
        break;
    case 4:
        cout<<"请输入要删除数据的位置:";
        cin>>i;
        ListDelete_L(L,i,e);
        cout<<"删除数据的值为:"<<e<<endl;
        break;
    case 5:f=2;
    }
    }while(f!=2);
}

 二、遇到的问题

      对于链表的原理不是很清楚,通过看书、百度搜索,弄明白了

三、明日计划

      继续学习Java 

posted @ 2020-10-07 07:56  小仙女W  阅读(87)  评论(0编辑  收藏  举报