您的位置:首页 > 编程语言 > C语言/C++

关于 双向循环链表 的一些基础程序

2017-05-21 19:53 190 查看
#include <stdio.h>

#include <stdlib.h>

#define T 1

#define F -1

typedef int el;

typedef int bo;

typedef struct Node* node;

struct Node

{

    node prior;

    el value;

    node next;

};

bo init(node *head);

bo insert_tail(node head, el value);

bo insert_head(node head, el value);

bo insert_index(node head, int index, el value);

bo length(node head);

bo delete_index(node head, int index);

void delete_value(node head, el value);

bo find_index(node head, int index);

void find_value(node head, el value);

bo update_index(node head, int index, el value);

void update_value(node head, el value, int x);

void printP(node head);

void printN(node head);

int main()

{

    node head = NULL;

    int i, ret;

    

    init(&head);

    for(i = 0; i < 10; i++)

    {

        insert_head(head, i);

    }

    printN(head);

    printP(head);

    for(i = 0; i < 10; i++)

    {

        insert_tail(head, i);

    }

    printN(head);

    printP(head);

    ret = length(head);

    printf("length = %d\n", ret);

    insert_index(head, 20, 100);

    printN(head);

    printP(head);

 

    delete_index(head, 20);

    printN(head);

    printP(head);

    delete_value(head, 0);

    printN(head);

    printP(head);

    

    find_index(head, 0);

   

    find_value(head, 5);

    update_index(head, 0, 200);

    printN(head);

    printP(head);

    update_value(head, 9, 300);

    printN(head);

    printP(head);

    return 0;

}

bo update_index(node head, int index, el value)

{

    if(index < 0 || index > length(head))

    {

        return F;

    }

    int i;

    for(i = 0; i < index; i++)

    {

        head = head->next;

    }

    head->next->value = value;

    

    return T;

}

void update_value(node head, el value, int x)

{

    int i;

    for(i = 0; i < length(head); i++)

    {

        if(head->next->value == value)

        {

            head->next->value = x;

        }

        head = head->next;

    }

    

}

bo find_index(node head, int index)

{

    if(index < 0 || index > length(head))

    {

        return F;

    }

    int i;

    for(i = 0; i < index; i++)

    {

        head = head->next;

    }

    

    printf("the number is : %d\n", head->next->value);

    return T;

}

void find_value(node head, el value)

{

    int i;

    for(i = 0; i < length(head); i++)

    {

        if(head->next->value == value)

        {

            printf("the site of the number is %d\n", i);

        }

        head = head->next;

    }

}

bo delete_index(node head, int index)

{

    int i;

    if(index < 0 || index > length(head))

    {

        return F;

    }

    for(i = 0; i < index; i++)

    {

        head = head->next;

    }

    node temp = head->next->next;

    free(head->next);

    head->next = temp;    

    temp->prior = head;

    return T;

}

void delete_value(node head, el value)

{

    node temp = head;

    node sen;

    while(temp->next != head)

    {

        if(temp->next->value == value)

        {

            sen = temp->next->next;

       free(temp->next);

            temp->next = sen;    

            sen->prior = temp;

        }

        else

        {

            temp = temp->next;   

        }

    }

}

bo length(node head)

{

    node temp = head;

    int count = 0;

    while(temp->next != head)

    {

        count++;

        temp = temp->next;

    }

    return count;

}

bo insert_index(node head, int index, el value)

{

    if(index < 0 || index > length(head))

    {

        return F;

    }

    

    node newnode = (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->prior = head;

    head->next->prior = newnode;

    newnode->next = head->next;

    head->next = newnode;

    return T;

}

bo init(node *head)

{

    node newnode = (node)malloc(sizeof(struct Node));

    if(NULL == newnode)

    {

        return F;

    }

    newnode->prior = newnode;

    newnode->next = newnode;

    

    *head = newnode;

}

bo insert_head(node head, el value)

{

    node newnode = (node)malloc(sizeof(struct Node));

    if(NULL == newnode)

    {

        return F;

    }

    newnode->value = value;

    head->next->prior = newnode;

    newnode->prior = head;

    newnode->next = head->next;

    head->next = newnode;

   

    return T;

}

bo insert_tail(node head, el value)

{

    node newnode = (node)malloc(sizeof(struct Node));

    if(NULL == newnode)

    {

        return F;

    }

   

    newnode->value = value;

    head->prior->next = newnode;

    newnode->next = head;

    newnode->prior = head->prior;

    head->prior = newnode;

    return T;

}

void printP(node head)

{

    node temp = head;

    

    while(temp->prior != head)

    {

        printf("%d  ", temp->prior->value);

        temp = temp->prior;

    }

    

    printf("\n");

}

void printN(node head)

{

    node temp = head;

    

    while(temp->next != head)

    {

        printf("%d  ", temp->next->value);

        temp = temp->next;

    }

    

    printf("\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言编程 c语言