数据结构之链表常见操作

#include <stdio.h>
#include "ListLink.h"

int main()
{
    Node *head;
    int ret = 0;

    ret = LinkInit(&head);
    if(ret == FAILURE)
    {
        printf("init fssilure\n");
    }
    else
    {
        printf("init success\n");
    }

    ret = Linkcreate(head);
    if(ret == FAILURE)
    {
        printf("create failure\n");
    }
    else
    {
        printf("create success\n");
    }

    ret = ListLength(head);
    if(ret == FAILURE)
    {
        printf("failure\n");
    }
    else
    {
        printf("length is %d\n", ret);
    }

    ret = ListEmpty(head);
    if(ret == FAILURE)
    {
        printf("request failure\n");
    }
    else if(ret == SUCCESS)
    {
        printf("list is empty\n");
    }
    else
    {
        printf("list is not empty\n");
    }

    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListInserttop(head);
    if(ret == FAILURE)
    {
        printf("inserttop failure\n");
    }
    else
    {
        printf("inserttop success\n");
    }

    ret = ListInsertback(head);
    if(ret == FAILURE)
    {
        printf("insertback failure\n");
    }
    else
    {
        printf("insertback success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListInsertRandom(head);
    if(ret == FAILURE)
    {
        printf("insertrandom failure\n");
    }
    else
    {
        printf("insertrandom success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListClear(head);
    if(ret == FAILURE)
    {
        printf("clear failure\n");
    }
    else
    {
        printf("clear success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListDestory(head);
    if(ret == FAILURE)
    {
        printf("destory failure\n");
    }
    else
    {
        printf("destory success\n");
    }
    return 0;
}#include <stdio.h>
#include "ListLink.h"

int main()
{
    Node *head;
    int ret = 0;

    ret = LinkInit(&head);
    if(ret == FAILURE)
    {
        printf("init fssilure\n");
    }
    else
    {
        printf("init success\n");
    }

    ret = Linkcreate(head);
    if(ret == FAILURE)
    {
        printf("create failure\n");
    }
    else
    {
        printf("create success\n");
    }

    ret = ListLength(head);
    if(ret == FAILURE)
    {
        printf("failure\n");
    }
    else
    {
        printf("length is %d\n", ret);
    }

    ret = ListEmpty(head);
    if(ret == FAILURE)
    {
        printf("request failure\n");
    }
    else if(ret == SUCCESS)
    {
        printf("list is empty\n");
    }
    else
    {
        printf("list is not empty\n");
    }

    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListInserttop(head);
    if(ret == FAILURE)
    {
        printf("inserttop failure\n");
    }
    else
    {
        printf("inserttop success\n");
    }

    ret = ListInsertback(head);
    if(ret == FAILURE)
    {
        printf("insertback failure\n");
    }
    else
    {
        printf("insertback success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListInsertRandom(head);
    if(ret == FAILURE)
    {
        printf("insertrandom failure\n");
    }
    else
    {
        printf("insertrandom success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListClear(head);
    if(ret == FAILURE)
    {
        printf("clear failure\n");
    }
    else
    {
        printf("clear success\n");
    }
    ret = ListTraverse(head);
    if(ret == FAILURE)
    {
        printf("travrese failure\n");
    }
    else
    {
        printf("traverse success\n");
    }

    ret = ListDestory(head);
    if(ret == FAILURE)
    {
        printf("destory failure\n");
    }
    else
    {
        printf("destory success\n");
    }
    return 0;
}
int LinkInit(Node **l)
{
    if((*l) == NULL)
    {
        return FAILURE;
    }

    (*l) = (Node *)malloc(sizeof(Node));
    if((*l) == NULL)
    {
        return FAILURE;
    }

    (*l)->next = NULL;
    return SUCCESS;
}

int Linkcreate(Node *head)
{
    int x;
    Node *p, *q;
    if(head == NULL)
    {
        return FAILURE;
    }
    printf("please input\n");
    while(1)
    {
        scanf("%d", &x);
        if(0 == x)
        {
            break;
        }
        q  = (Node *)malloc(sizeof(Node));
        q->data = x;
       
        if(head->next == NULL)
        {
            q->next = head->next;
            head->next = q;
        }
        else
        {
            q->next = p->next;
            p->next = q;
        }
        p = q;
    }
    return SUCCESS;
}

int ListLength(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }

    int i = 0;
    Node *p = head->next;
    while(p != NULL)
    {
        i++;
        p = p->next;
    }
    return i;
}

int ListEmpty(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }
    if(head->next != NULL)
    {
        return FALSE;
    }
    return SUCCESS;
}

int ListTraverse(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }
    Node *p = head->next;
    while(p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
    return SUCCESS;
}

int ListInserttop(Node *head)
{
    int x;
    if(head == NULL)
    {
        return FAILURE;
    }
    printf("please input\n");
    scanf("%d", &x);

    Node *p = (Node *)malloc(sizeof(Node));
    p->data = x;
    p->next = head->next;
    head->next = p;

    return SUCCESS;
}

int ListInsertback(Node *head)
{
    int x;
    if(head == NULL)
    {
        return FAILURE;
    }
    Node *p = head;
    while(p->next != NULL)
    {
        p = p->next;
    }
    printf("please input\n");
    scanf("%d", &x);

    Node *q = (Node *)malloc(sizeof(Node));
    if(q == NULL)
    {
        return FAILURE;
    }
    q->data = x;
    q->next = p->next;
    p->next = q;

    return SUCCESS;
}

int ListInsertRandom(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }
    int l, x, i;
    Node *p = head;
    printf("please input where you want to insert\n");
    scanf("%d", &l);

    printf("please input element\n");
    scanf("%d", &x);

    Node *q = (Node *)malloc(sizeof(Node));
    q->data = x;
    for(i = 1; i < l; i++)
    {
        p = p->next;
    }
    q->next = p->next;
    p->next = q;

    return SUCCESS;
}

int ListClear(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }
    Node *p = head->next;
    while(p != NULL)
    {
        Node *q = p;
        p = p->next;
        free(q);
    }
    head->next = NULL;
    return SUCCESS;
}
int ListDestory(Node *head)
{
    if(head == NULL)
    {
        return FAILURE;
    }
    //Node *q;
    Node *p = head->next;
    while(p != NULL)
    {
     Node *q = p;
        p = p->next;
        free(q);
    }

    free(head);
    free(p);
    head = NULL;
    p = NULL;
}

猜你喜欢

转载自blog.csdn.net/weixin_42720316/article/details/82950104
今日推荐