数据结构:单链表的基本操作

#include<iostream>
using namespace std;
#define ElemType int
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList; 
bool GetElem(LinkList L,int idx,ElemType &x){
    LNode *p=L->next;
    int j=1;
    while(p&&j<idx){
        p=p->next;
        j++;
    }
    if(!p||j>idx)return false;
    x=p->data;
    return true;
}

bool ListInsert(LinkList &L,int idx,ElemType x){
    LNode *p=L;
    int j=0;
    while(p&&j<idx-1){
        p=p->next;
        j++;
    }
    if(!p||j>idx-1)return false;
    LNode *s=new LNode;
    s->data=x;
    s->next=p->next;
    p->next=s;
    return true; 
}

bool ListDelete(LinkList &L,int idx,ElemType &x){
    LNode *p=L;
    int j=0;
    while(p->next&&j<idx-1){
        p=p->next;
        j++;
    }
    if(!p->next||j>idx-1)return false;
    LNode *s=p->next;
    x=s->data;
    p->next=s->next;
    delete s;
    return true;
}

void CreateListHead(LinkList &L){
    L=new LNode;
    L->next=NULL;
    LNode *s;
    ElemType x;
    cin>>x;
    while(x!=-1){
        s=new LNode;
        s->data=x;
        s->next=L->next;
        L->next=s;
        cin>>x;
    }
}

void CreateListTail(LinkList &L){
    L=new LNode;
    LNode *s,*r=L;
    ElemType x;
    cin>>x;
    while(x!=-1){
        s=new LNode;
        s->data=x;
        r->next=s;
        r=s;
        cin>>x;
    }
    r->next=NULL;
}
int main(){
    LinkList L;
    CreateListTail(L);
    for(LNode *p=L->next;p;p=p->next){
        cout<<p->data<<" ";
    }
    cout<<endl;
    
    ElemType x;
    GetElem(L,2,x);
    cout<<"x: "<<x<<endl;
    
    ListInsert(L,2,5);
    for(LNode *p=L->next;p;p=p->next){
        cout<<p->data<<" ";
    }
    cout<<endl;
    
    ListDelete(L,4,x);
    for(LNode *p=L->next;p;p=p->next){
        cout<<p->data<<" ";
    }
    cout<<endl;
    cout<<"x: "<<x<<endl;
    return 0;
}
//74 51 34 21 8 14 77 19 28 54 -1

 

posted on 2020-03-13 22:12  ~明月几时有  阅读(140)  评论(0)    收藏  举报