链表操作,其实也不难,但也不是特别容易,重点是要弄清楚原理,原理弄清之后,然后初学者多画画草图,代码也不难写出来

具体操作见代码了呀~~

ps:本文的头插法是倒序插入的方,一般教材也是用倒序插入的方法

#include<bits/stdc++.h>
#define ERROR 0
#define OK 1
#define Status int
using namespace std;

typedef int Elementtype;

typedef struct Lnode{
    Elementtype data;
    struct Lnode *nxt;
}Lnode ,*Linklist;

Elementtype a[100];

///头插法
Linklist create_head(Elementtype a[],int n)
{
    Linklist head;
    head = (Linklist)malloc(sizeof(Lnode));
    head->nxt=NULL;
    for(int i=n-1;i>=0;i--){
        Linklist q = (Linklist)malloc(sizeof(Lnode));
        q ->data=a[i];
        q->nxt=head->nxt;
        head->nxt=q;
    }
    return head;
}

///尾插法
Linklist create_tail(Elementtype a[],int n)
{
    Linklist head;
    head = (Linklist)malloc(sizeof(Lnode));
    head->nxt=NULL;
    Linklist p = head;
    for(int i=0;i<n;i++){
        Linklist q = (Linklist)malloc(sizeof(Lnode));
        q->data=a[i];
        q->nxt=NULL;
        p->nxt=q;
        p=q;
    }
    return head;
}

///删除
Status delete_element(Linklist head,int i,int n)
{
    Linklist p = head;
    if(i>=n||i<0) return ERROR;
    int j=0;
    while(p!=NULL&&j<i){
        j++;
        p=p->nxt;
    }
    Linklist q = p->nxt;
    p->nxt=q->nxt;
    free(q);
    return OK;
}

///插入
Status insert_element(Linklist head,int i,int n,int key){
    Linklist p = head;
    if(i>n||i<0) return ERROR;
    int j=0;
    while(p&&j<i){
        j++;
        p=p->nxt;
    }
    Linklist q = (Linklist)malloc(sizeof(Lnode));
    q ->data=key;
    q ->nxt=p->nxt;
    p->nxt=q;
    return OK;
}

///输出
void display(Linklist head){
    Linklist p = head->nxt;
    while(p){
        printf("%d ",p->data);
        p=p->nxt;

    }
    printf("\n");
}

int main(){

    printf("请输入:\n");
    for(int i=0;i<5;i++){
        scanf("%d",&a[i]);
    }
    printf("输出如下:\n");
    Linklist head = create_head(a,5);
    display(head);
    head = create_tail(a,5);
    display(head);
    int flag=delete_element(head,3,5);
    if(flag){
        display(head);
    }
    flag = insert_element(head,3,5,111);
    if(flag){
        display(head);
    }
    return 0;
}

然后输入输出下

链表基本操作(小结)

 

相关文章: