链表相关程序练习

来源:互联网 发布:淘宝买被子好吗 编辑:程序博客网 时间:2024/06/05 07:59

源程序

#include <stdio.h>#include <stdlib.h>#define T 1#define F -1typedef int Type;typedef int Status;struct Node{    Type value;    struct Node *next;};Status init(struct Node **h);Status insert_head(struct Node *head, Type value);void print(struct Node *head);Status insert_tail(struct Node *head, Type value);int lenth(struct Node *head);Status insert_index(struct Node *head, Type value, int index);Status delete_index(struct Node *head, int index);Status delete_value(struct Node *head, Type value);Status update_index(struct Node *head, int index, Type value);void update_value(struct Node *head, Type old_value, Type new_value);Status query_index(struct Node *head, int index);void query_value(struct Node *head, Type value);int main(){    int ret = 0;    int i;    struct Node *head;    ret = init(&head);    printf(ret ? "initialize successfully\n" : "initialize failed\n");    for (i = 0; i < 10; i++)    {        insert_head(head, i);    }    print(head);    for (i = 0; i < 10; i++)    {        insert_tail(head, i);    }    print(head);    printf("%d\n", lenth(head));    insert_index(head, 99, 19);    print(head);    delete_index(head, 19);    print(head);    delete_value(head, 2);    print(head);    update_index(head, 3, -1);    update_value(head, 6, 66);    print(head);    query_index(head, 3);    query_value(head, 7);    return 0;}Status init(struct Node **h){    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));    if (NULL == newnode)    {        return F;    }    newnode->value = 0;    newnode->next = NULL;    *h = newnode;    return T;}Status insert_head(struct Node *head, Type value){    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));    if (NULL == newnode)    {        return F;    }    newnode->value = value;    newnode->next = head->next;    head->next = newnode;    return T;}Status insert_tail(struct Node *head, Type value){    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));    if (NULL == newnode)    {        return F;    }    newnode->value = value;    newnode->next = NULL;    while (head->next != NULL)    {        head = head->next;    }    head->next = newnode;    return T;}Status insert_index(struct Node *head, Type value, int index){    if (0 == index || index > lenth(head))    {        printf("out of range\n");        return F;    }    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));    if (NULL == newnode)    {        return F;    }    int i;    for (i = 0; i < index; i++)    {        head = head->next;    }    newnode->value = value;    newnode->next = head->next;    head->next = newnode;    return T;}Status delete_index(struct Node *head, int index){    if (0 == index || index > lenth(head))    {        printf("out of range\n");        return F;    }    int i;    for (i = 0; i < index; i++)    {        head = head->next;    }    struct Node *tmp = head->next->next;    free(head->next);    head->next = tmp;    return T;}Status delete_value(struct Node *head, Type value){    int i, len;    len = lenth(head);    for(i = 0; i < len; i++)    {//        printf("i = %d value = %d\n", i, head->next->value);        if (head->next->value == value)        {            struct Node *tmp = head->next->next;            free(head->next);            head->next = tmp;        }        else        {            head = head->next;        }    }    return T;}Status update_index(struct Node *head, int index, Type value){    if (index < 0 || index > lenth(head))    {        printf("out of range\n");        return F;    }    int i;    for (i = 0; i <= index; i++)    {        head = head->next;    }    head->value = value;    return T;}void update_value(struct Node *head, Type old_value, Type new_value){    while (head->next != NULL)    {        if (head->next->value == old_value)        {            head->next->value = new_value;        }        head = head->next;    }}Status query_index(struct Node *head, int index){    if (index < 0 || index > lenth(head))    {        printf("out of range\n");        return F;    }    int i;    for (i = 0; i <= index; i++)    {        head = head->next;    }    printf("index = %d value = %d\n", index, head->value);    return T;}void query_value(struct Node *head, Type value){    int count = 0;     int index = 0;    while (head->next != NULL)    {        if (head->next->value == value)        {            count++;            printf("find %d: %d\n", value, index);        }        head = head->next;        index++;    }    if (0 == count)    {        printf("not found\n");    }}void print(struct Node *head){    while (NULL != head->next)    {        printf("%d ", head->next->value);        head = head->next;    }    printf("\n");}int lenth(struct Node *head){    int count = 0;    while (NULL != head->next)    {        count++;        head = head->next;    }    return count;}

运行结果

这里写图片描述

原创粉丝点击