动态链表的创建及使用

来源:互联网 发布:安卓软件挂 编辑:程序博客网 时间:2024/05/20 23:04

链表的创建及使用一直是一个小难题,今天我分享一下我的学习心得吧。
首先,要创建一个头结点。
struct node
{
int data;
struct node *next;
};

完成后分为4步:1、创建链表 2、输出链表 3、插入某一个数 4、删除某一个数
这就是一个简单链表的结构,当然,如果你想添加更多功能的话,可以自己加入,是它变得更加丰富多彩!
1、创建链表

SLIST *creat_slist(void);//创建链表SLIST *creat_slist(void){    int c;    SLIST *h,*s,*r;    h=(SLIST *)malloc(sizeof(SLIST));    r=h;    scanf("%d",&c);    while(c!=-1)    {         s=(SLIST *)malloc(sizeof(SLIST));         s->data=c;         r->next=s;         r=s;         scanf("%d",&c);    }     r->next='\0';     return h;}

2、输出链表

void printf_slist(SLIST *h);//输出链表void printf_slist(SLIST *h){    SLIST *p;    p=h->next;    if(p=='\0') printf("Linklist is null!\n");    else        {            printf("head");            do            {                printf("->%d",p->data);                p=p->next;            }            while(p!='\0');            printf("end\n");        }}

3、插入某一个数

void insert_slist(SLIST *h,int x,int y);//插入某一个数void insert_slist(SLIST *h,int x,int y){    SLIST *s,*p,*q;    s=(SLIST *)malloc(sizeof(SLIST));    s->data=y;    q=h;    p=h->next;    while(p!='\0'&&p->data!=x)    {        q=p;        p=p->next;    }    s->next=p;    q->next=s;}

4、删除某一个数

void delete_slist(SLIST *h,int x);//删除某一个数void delete_slist(SLIST *h,int x){    SLIST *p,*q;    q=h;    p=h->next;    while(p!='\0'&&p->data!=x)    {        q=p;        p=p->next;    }    if(q->data==x)    {        q->next=p->next;    }}

5、主函数

int main(void){    SLIST *h;    int x,y,m;    system("cls");    scanf("%d%d",&x,&y);//y插入到x的前面    scanf("%d",&m);//删除m    h=creat_slist();    printf_slist(h);    insert_slist(h,x,y);    printf_slist(h);    delete_slist(h,m);    printf_slist(h);}
2 0