小言_互联网的博客

数据结构 单向链表 C++ 非Class实现

265人阅读  评论(0)

数据结构 单向链表 C++ 非Class实现

昨天上了数据结构的课程,虽然说上个学期也上了链表(但我没认真听),而且我觉得用Class实现简单链表太麻烦了,所以直接用struct实现了一下

上代码:

#include <bits/stdc++.h>
using namespace std;
int n,m,x;
struct Link{
    int data;
    Link *nxt;
};
Link *head;
void preadd(){
    Link *newNode= new Link;
    newNode->data=x;
    newNode->nxt=head;
    head=newNode;
}
void backadd(){
    Link *newNode = new Link;
    newNode->data=x;
    newNode->nxt=NULL;
    Link *pp=head;
    if(head==NULL)
        head=newNode;
    else{
        while(pp->nxt!=NULL)
            pp=pp->nxt;
        pp->nxt=newNode;
    }
}
void interadd(int pos){
    Link *newNode = new Link;
    newNode->data=x;
    Link *pp= head;
    while(pos--){
        pp=pp->nxt;
    }
    newNode->nxt=pp->nxt;
    pp->nxt=newNode;
}
void del(int pos){
    pos-=2;//这里需要-2,因为从头开始,我们只需跳四步即可到达pos位置,但我们需要删掉pos位置,所以需要再退一步
    Link *newNode = new Link;
    newNode->data=x;
    Link *pp= head;
    while(pos--){
        pp=pp->nxt;
    }
    pp->nxt=pp->nxt->nxt;
}
void init(){
    head = NULL;
}
void print(){
    while(head!=NULL){
        printf("%d ",head->data);
        head=head->nxt;
    }
}
int main(){
    init();
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        backadd();
    }
    while(m--){
        int p,pos;
        scanf("%d",&p);
        if(p==1){
            scanf("%d",&x);
            backadd();//在尾部加
            ++n;
        }
        else if(p==2){
            scanf("%d",&x);
            preadd();//在前面加
            ++n;
        }
        else if(p==3){
            scanf("%d %d",&pos,&x);
            interadd(pos);//在位置pos后插入
            ++n;
        }
        else {
            scanf("%d",&pos);
            del(pos);//删除pos位置的元素
            --n;
        }
    }
    print();
return 0;
}

转载:https://blog.csdn.net/qq_33437973/article/details/101035084
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场