数据结构学习——单链表ADT(程序化)

来源:互联网 发布:linux保存文件并退出 编辑:程序博客网 时间:2024/06/07 06:38

看了一点网上的代码,结合自己对链表的理解。将对链表常用的操作集合程序化如下:

#include<stdio.h>#include<stdlib.h>typedef struct Node{    int Val;    struct Node *next;}List;List *list_add(List **p,int Val);//此处是二级指针void List_Print(List *p);List *list_insert(List **p,int Val,int i);//i为插入的位置 Val插入的值List *list_remove(List **p,int i);//删除指定位置i的值int main(){    List *n=NULL;    list_add(&n,0);    list_add(&n,1);    list_add(&n,2);    list_add(&n,3);    list_add(&n,4);    list_insert(&n,5,3);    list_insert(&n,6,2);    list_remove(&n,2);    list_remove(&n,3);    List_Print(n);    return 0;}List *list_remove(List **p,int i)//删除指定位置i的值{    int count=0;    List *q,*a;    a=*p;    if(p==NULL)        return NULL;    for(count=0;count<(i-2);count++)    {        a=a->next;        if(a==NULL)            return NULL;    }    q=a->next;//后继元    a->next=q->next;    return *p;}List *list_insert(List **p,int Val,int i){    int count=0;    List *q,*a;    a=*p;    if(p==NULL)        return NULL;    for(count=0;count<(i-2);count++)    {        a=a->next;        if(a==NULL)            return NULL;    }    q=a->next;//后继元    List *temp=(List *)malloc(sizeof(List));    temp->next=q;    temp->Val=Val;    a->next=temp;    return *p;}List *list_add(List **p,int Val)//此处是二级指针{    if(p==NULL)        return NULL;    List *temp=(List *)malloc(sizeof(List));    temp->next=*p;    temp->Val=Val;    *p=temp;  //头指针移动到开始处 *P在此处的作用为头指针    return *p;}void List_Print(List *p){    if(p==NULL)        printf("list is empty\n");    while(p)    {         printf("%d\t",p->Val);         p=p->next;    }}


0 0
原创粉丝点击