单链表的基本操作(初始化,增加,删除)

来源:互联网 发布:php argv 参数 编辑:程序博客网 时间:2024/06/10 18:20

最近在看数据结构,练习单链表的基本操作,没什么难度,算是做个记录吧。

#include <stdio.h>#include <malloc.h>#include <stdlib.h>//单链表的初始化增删插 date 2015/3/27//定义单链表typedef struct Node{    int data;    struct Node * next;}Node,* p_Node;void init_Node(Node &*); //初始化一个结点为空的链表void add_Node_from_head(p_Node  ,int );//从头部位置添加结点void add_Node_in_pos(p_Node,int,int);//在指定位置添加结点void delete_Node_in_pos(p_Node ,int);//在指定位置删除结点int get_Node_length(p_Node);//得到链表的结点数void show_Node(p_Node);//输出结点信息int main(void){    Node node;    p_Node p  = &node;    init_Node(p);    add_Node_from_head(p,5);    add_Node_from_head(p,3);    add_Node_from_head(p,2);    add_Node_in_pos(p,3,66);    delete_Node_in_pos(p,1);    show_Node(p);    return 0;}void delete_Node_in_pos(Node * L ,int pos){    p_Node p = L;    int j = 0 ;    while(p && j < pos - 1)    {        p = p->next;        j++;    }    if(p == NULL || j > pos)    {        printf("pos错误");        exit(-1);    }    p_Node delete_Node = p->next;    p->next = delete_Node->next;    free(delete_Node);}void add_Node_in_pos(Node * L,int pos,int val){    int j = 0;    p_Node p = L;    while(p && j < pos - 1)    {        p = p->next;        j++;    }    if(p == NULL || j > pos)    {        printf("pos错误");        exit(-1);    }    p_Node newNode = (p_Node)malloc(sizeof(Node));    newNode->data = val;    newNode->next = p->next;    p->next = newNode;}int get_Node_length(Node * L){    int i = 0;    if(NULL == L)    {        printf("不存在的链表");        exit(-1);    }    while(L->next != NULL)    {        L = L->next;        i++;    }    return i;}void show_Node(Node * L){     p_Node p ;     p = L->next;     while(p != NULL)     {        printf("%d\n",p->data);        p = p->next;     }}void add_Node_from_head(Node * L ,int val){    if(NULL == L || NULL == val)    {        printf("不存在的链表或数据");        exit(-1);    }    p_Node p = (p_Node)malloc(sizeof(Node));    if(NULL == p)    {        printf("申请内存空间失败\n");        exit(-1);    }    p->data = val;    p->next = L->next;    L->next = p;}void init_Node(Node *& p){    p = (p_Node)malloc(sizeof(Node));    if(NULL == p)    {        printf("申请内存空间失败\n");        exit(-1);    }    p->next = NULL;}
0 0
原创粉丝点击