c语言链表,头插法和尾插法

原创 2017年01月03日 23:33:20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stData{
    int e;
}Data;

typedef struct stLink{
    Data data;
    struct stLink* next;
}Link;

struct Link* create(){
    Link* head = (Link*)malloc(sizeof(Link));
    memset(&head->data,0,sizeof(Link));
    head->next = NULL;
    return head;
}

void head_insert(Link* head,Data e){
    Link *pTemp,*pNew;
    if (head->data.e != 0){
        pTemp = head->next;
        pNew = (Link*)malloc(sizeof(Link));
        memcpy(&pNew->data,&e,sizeof(Data));
        pNew->next = pTemp;
        head->next = pNew;
    }else{
        memcpy(&head->data,&e,sizeof(Data));
    }
}

void nial_insert(Link* head,Data e){
    Link *pTemp,*pNew;
    pTemp = head;
    if (head->data.e != 0){
        pNew = (Link*)malloc(sizeof(Link));
        memcpy(&pNew->data,&e,sizeof(Data));
        while(pTemp->next != NULL)
            pTemp = pTemp->next;
        pTemp->next = pNew;
        pNew->next = NULL;
    }
    else{
        memcpy(&head->data,&e,sizeof(Data));
    }
}

void dele(Link* head,Data e){
    Link *pBefore = head;
    Link *pTemp = head;
    while(pTemp->next != NULL){
        if (pTemp->data.e == e.e)
        {
            Link *pDel = pTemp;
            pBefore->next = pTemp->next;
            pDel->next = NULL;
            free(pDel);
            return;
        }else{
            pBefore = pTemp;
            pTemp = pTemp->next;
        }
    }
    if (pTemp->data.e == e.e)
    {
        Link *pDel = pTemp;
        pBefore->next = pTemp->next;
        pDel->next = NULL;
        free(pDel);
    }
}

void show(Link* head){
    Link *pTemp = head;
    while(pTemp->next != NULL){
        printf("%d \n",pTemp->data.e);
        pTemp = pTemp->next;
    }
    printf("%d \n",pTemp->data.e);
}

int main()
{
    Link *head = create();
    Data e1={1001},e2={1002},e3={1003},e4={1004};
    //head_insert(head,e1);
    //head_insert(head,e2);
    //head_insert(head,e3);
    //head_insert(head,e4);
    nial_insert(head,e1);
    nial_insert(head,e2);
    nial_insert(head,e3);
    nial_insert(head,e4);
    show(head);
    printf("dele------------\n");
    dele(head,e2);
    show(head);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

尾插法建立单向链表 C语言实现

代码实现#include #include//定义linklist结构体类型 typedef struct linklist { int data; struct linklist *...

带表头的单链表算法分析(前插法示例,C语言实现)

前插法创建单链表 前插法的单链表基本操作1.前插法创建单链表 分析:首先这是一个带表头的单链表操作,第一行图片为空的单链表,也为表头。依次输入A,B,C,D四个值并用前插法保存到链表中。2. 前插法...

C语言实现链表的头插,尾插,插入,修改,删除和遍历

#include "stdio.h" #include "stdlib.h" #define N sizeof(struct node) //链表结构体 typedef struct ...

单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)

单链表的定义:单链表是一种顺序存储的结构。 有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。 有一个尾结点,有值域,也有链域,链域值始终为NULL。 所以,在单链表中为找第i个...

Linux下的C语言编程——头插法建立单链表

 建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中。 #include #include struct node//瀹氫箟涓€涓粨鏋勪...

《数据结构与算法——C语言描述》答案 3.15 自调整表的实现(链表法)

转载请注明出处:http://blog.csdn.net/xdz78 #include #include //3.15 //定义一个结构体 typedef struct student ...
  • xdz78
  • xdz78
  • 2015-05-26 02:46
  • 816

C语言链表常见用法

链表是一种数据结构序列,它通过链环连接在一起。链环包含不同数据。每个链环包含有对其它链环的链接。链表是除数组之外使用最广的数据结构。其常见用法示例如下:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)