数据结构链表

xiaoxiao2021-02-28  93

本人根据严蔚敏版《数据结构》进行编写,如有不对的地方请指出,谢谢

#include <stdio.h>

#include <stdlib.h>

#define ok 1;

#define error 0;

typedef struct lnode{

    int data;

    struct lnode *next;

}lnode,*linklist;

int lnitlist (linklist *l) {//创建链表

    *l=(linklist)malloc(sizeof(lnode));

    if(!(*l)) {

        return error;

    }

    else {

        (*l)->next=NULL;

    }

    return ok;

}

int numlink(linklist l) {//返回个数

    if(!l) return error;

    int num=0;

    linklist p;

    p=l;

    while(p) {

        p=p->next;

        num+=1;

    }

    return num-1;

}

int deletelink(linklist l,int i) {//删除

    if(!l) return error;

    linklist p,q;

    int j=1;

    p=l;

    if(i>numlink(l)) return error;

    while(p->next&&j<i) {

        p=p->next;

        j++;

}

    if(!(p->next)||j>i) return 0;

    q=p->next;

    p->next=q->next;

    free(q);

    return ok;

}

    

    

int listinsert (linklist *l,int i,int e) {//插入

    linklist p,s;

    p=*l;

    int j=1;

    while(p&&j<i) {

        p=p->next;

        j++;

    }

    if(!p||j>i) {

     return error;

    } else {

    s=(linklist) malloc(sizeof(lnode));

    s->data=e;

    s->next=p->next;

    p->next=s;

    }

    return ok;

}

int listtraverse(linklist l) {//输出

    linklist p=l->next;

    while (p) {

        printf("=",p->data);

        p=p->next;

    }

    printf("\n");

    return ok;

}

int main(int argc, const char * argv[]) {

    linklist l;

    lnitlist(&l);

    int p;

    for(p=1;p<=5;p++) {

    listinsert(&l,1,p);

    }

    listinsert(&l, 4,4);

    deletelink(l,2);

    printf("%d\n",numlink(l));

    listtraverse(l);

    return 0;

}

**************************************************************************

//下面是我的个人理解

#include <stdio.h>

#include <stdlib.h>

#define ok 1

#define error 0;

typedef struct lnode{

    int data;

    struct lnode *next;

}lnode,*linklist;

int initlinklist(linklist *l) {//创建链表

    *l=(linklist)malloc(sizeof(lnode));

    if(!(*l)) {

        return error;

    }else {

        (*l)->next=NULL;

    }

    return ok;

}

int scanf_(linklist l,int n) {//输入

    if(!l) return error;

    linklist p;

    int i,j;

    for(i=0;i<n;i++) {

        p=(linklist)malloc(sizeof(lnode));

        scanf("%d",&j);

        p->data=j;

        l->next=p;

        l=p;

    }

    return ok;

}

int printf_(linklist l) {//输出

    while(l->next) {

        l=l->next;

        printf("=",l->data);

    }

    printf("\n");

    return ok;

}

int deletelinklist(linklist l,int n) {//删除

    if(!l) return error;

    int i;

    for(i=0;i<n-1;i++) l=l->next;

    linklist p;

    p=(linklist)malloc(sizeof(lnode));

    p=l->next->next;

    l->next=p;

    return ok;

}

int main(int argc, const char * argv[]) {//调试

    linklist l=NULL;

    initlinklist(&l);

    int i;

    scanf("%d",&i);

    scanf_(l,i);

    deletelinklist(l, 2);

    printf_(l);

    return 0;

}

感谢阅读,谢谢 orz

转载请注明原文地址: https://www.6miu.com/read-96442.html

最新回复(0)