数据结构2_单链表

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

typedef int ElemType;
typedef struct node
{
    ElemType elem;
    struct node * next;
} LinkList;

LinkList * initLink()
{
    LinkList * p;
    LinkList * temp = (LinkList *)malloc(sizeof(LinkList));
    
    p = temp;
    temp->next = NULL;
    
    for(int i=0; i<6; ++i)
    {
        LinkList * pNew = (LinkList *)malloc(sizeof(LinkList));
        pNew->elem = i;
        
        temp->next = pNew;
        pNew->next = NULL;
        
        temp = pNew; 
    }
    
    return p;
}

//插入元素
LinkList * insertElem(LinkList * list, int add, ElemType elem)
{
    LinkList * temp = list;
    
    for(int i=1; i<add; ++i)
    {
        if(temp->next == NULL)
        {
            printf("插入位置不存在!\n");
            return list;
        }
        temp = temp->next;
    }
    
    LinkList * pNew = (LinkList *)malloc(sizeof(LinkList));
    pNew->elem = elem; 
    
    pNew->next = temp->next;
    
    temp->next = pNew;
    
    return list;
    
    
} 

//查找元素
int selectElem(LinkList * list, ElemType elem)
{
    LinkList * temp = list;
    
    int add = 0;
    
    temp = temp->next;
    
    while(temp)
    {
        if(temp->elem == elem)
            return ++add;
        ++add;
        temp = temp->next;
    }
    
    return 0;
    
}

//删除元素
LinkList * deleteElem(LinkList * list, ElemType elem)
{
    LinkList * temp = list;
    
    int add = selectElem(list, elem);
    
    if(add<1)
        printf("删除元素不存在!\n");
        return list;
    
    for(int i=0; i<add-1; ++i)
        temp = temp->next;
    
    LinkList * p;
    
    p = temp->next;
    
    temp->next = temp->next->next;
    
    free(p);
    
    return list;
    
}

//修改元素 
LinkList * modifyElem(LinkList * list, ElemType elem1, ElemType elem2) 
{
    LinkList * temp = list;
    
    int add = selectElem(list, elem1);
    
    for(int i=0; i<add; ++i)
    {
        temp = temp->next;
    }
    
    temp->elem = elem2;
    
    return list;
}

void traverse(LinkList * p)
{
    LinkList * temp;
    
    temp = p->next;
    
    while(temp)
    {
        printf("%-4d",temp->elem);
        temp = temp->next;
    }
    
    printf("\n");
}

int main(void)
{
    LinkList * list;
    
    list = initLink();
    
    traverse(list);
    
    //list = insertElem(list,-1, 43) ;
    
    //printf("%d\n",selectElem(list,7));
    
    //list = deleteElem(list,7);
    
    list = modifyElem(list,6, 23);
    
    traverse(list);
    
    return 0;
}

 

posted @ 2020-07-13 03:24  陌上尘如玉  阅读(110)  评论(0)    收藏  举报