分享

list

 海漩涡 2016-07-24

====================================================================

// list.h
#ifndef _SIGNAL_LIST_H_
#define _SIGNAL_LIST_H_

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct Node{
    ElemType E;
    int key;
    struct Node *next;
}LNode;

int SignalListInit(LNode *L);

int AddElem(LNode *L, int key, ElemType *E);

int FindElem(LNode *L,  int key, ElemType *E);

int DelElem(LNode *L,  int key);

int ChangeElem(LNode *L, int key, ElemType *E);

int ShowAllElem(LNode *L);

int ClearList(LNode *L);

#endif


===================================================================


//  list.c
#include "signal_list.h"

int SignalListInit(LNode *L)
{
    L->E = 0;
    L->key = -1;    // key大于0
    L->next = NULL;
}

int AddElem(LNode *L, int key, ElemType *E)
{
    if(NULL == L || NULL == E)
    {
        printf("AddElem error\n");
        return -1;
    }

    LNode *tmp_L = (LNode *)malloc(sizeof(LNode));
    tmp_L->E = *E;
    tmp_L->key = key;
    tmp_L->next = L->next;
    L->next = tmp_L;    // 头插法
    return 0;
}

// 查找第一个key的元素E
int FindElem(LNode *L,  int key, ElemType *E)
{
    if(NULL == L || NULL == E || NULL == L->next)
    {
        printf("find error\n");
        return -1;
    }

    L = L->next;
    while(NULL != L)
    { 
        if(key == L->key)
        {
            *E = L->E;
            return 0;
        }
        L = L->next;
    }

    // 未找到该元素
    return -1;
}


// 删除第一个key元素
int DelElem(LNode *L,  int key)
{
    LNode *tmp_L;
    
    if(NULL == L || NULL == L->next)
    {
        return -1;
    }
    
    while(NULL != L->next)
    {
        tmp_L = L->next;
        if(key == tmp_L->key)
        {
            L->next = tmp_L->next;
            free(tmp_L);
            return 0;
        }
        L = L->next;
    }
    return -1;    
}

int ChangeElem(LNode *L, int key, ElemType *E)
{
    if(NULL == L || NULL == L->next)
    {
        printf("find error\n");
        return -1;
    }

    L = L->next;
    while(NULL != L)
    {
 
        if(key == L->key)
        {
            L->E = *E;
            return 0;
        }
    }
    return -1;
}

int ShowAllElem(LNode *L)
{
    if(NULL == L || NULL == L->next)
    {
        printf("ShowAllElem error\n");
        return -1;
    }
    
    while(NULL != L->next)
    {
        printf("TTT---key[%d]--Elem[%d]\n",L->next->key, L->next->E);
        L = L->next;
    }
    return 0;
}

int ClearList(LNode *L)
{
    if(NULL == L || NULL == L->next)
    {
        printf("find error");
        return -1;
    }
    
    LNode *tmp_L = L->next;
    while(NULL != tmp_L)
    {
        L->next = tmp_L->next;
        free(tmp_L);
        tmp_L =  L->next;
    }
    
    return 0;
}

==================================================================

// main.c
#include "signal_list.h"

int main()
{
    int i;
    LNode L;
    ElemType E;

    SignalListInit(&L);

    for(i = 0; i < 10; i++)
    {
        E = i;
        AddElem(&L, i, &E);
    }

    ShowAllElem(&L);

    for(i = 0; i < 10; i++)
    {
        E = i;
        DelElem(&L, i);
    }
    
    ShowAllElem(&L);

    for(i = 10; i < 20; i++)
    {
        E = i;
        AddElem(&L, i, &E);
    }

    FindElem(&L,  19, &E);
    printf("TTT----find[%d]\n", E);
    DelElem(&L, 18);
    DelElem(&L, 17);
    ShowAllElem(&L);

    ClearList(&L);  
    ShowAllElem(&L);
    
    return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约