码迷,mamicode.com
首页 > 其他好文 > 详细

链表的简单操作-----删除,添加,查找(Xcode)

时间:2016-04-12 20:57:18      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>

#include "shou_note.h"

 

struct student *create()  /*这个括号是什么意思?*/

{

    //创建 头指针 尾指针 新指针

    struct student *phead=NULL;

    struct student *pend =NULL;

    struct student *pnew =NULL;

    int i=0;    //循环变量

    //建立链表及第一个结点

    //因为第一个结点是头结点,所以要放在循环外面处理

    pnew=(struct student*)malloc(sizeof(struct student));

    scanf("%s%d",phead->name,phead->age);

    phead=pnew=pend;/*现在只有一个结点,同时为三个结点*/

    //建立后面三个结点

    for(i=1;i<4;i++){

     pnew=(struct student*)malloc(sizeof(struct student));

     scanf("%s%d",phead->name,phead->age);

        pend->next=pnew;

        pend=pnew;

    }

    pend->next=NULL;

    return phead;

    

    

    

    }

                    

    //输出结点

 

void print(struct student *phead){

 

    struct student *p;  //建立临时指针

    p=phead;             //便临时指向头结点

    while (p!=NULL) {

        printf("姓名:%s 年龄:%d\n",p->name,p->age);

        p=p->next;

    }

 

}

 

//函数:void del 删除指定姓名结点

//参数:struct student *phead,char *name

//返回值:void

 

void del(struct student *phead,char *name){

 

//为了简化程序,本函数有一个缺陷:无法删除第一个结点

 

    struct student *pfront=NULL;

    struct student *pback =NULL;

    pback=phead;

    pfront=pback->next;

    while (pfront!=NULL) {

        if (strcmp(name, pfront->name)==0) //找到名字开始删除

        {

            //下面进行pfront指向的函数进行删除

            pback->next=pfront->next;

            free(pfront);

            return;

        }

        pback=pfront;

        pfront=pfront->next;

    }

    printf("要删除的名字未找到.");

}

 

    //插入一个结点在指定姓名之前

void insert(struct student *phead,char *name){

 

//为了简化结点,本函数有一个缺陷,无法在第一个函数之前插入节点.

    

    struct student *pfront=NULL;

    struct student *pback =NULL;

    struct student *pnew  =NULL;

    //前结点 后结点 新结点

    //与删除操作不同的是插入结点要插入新的结点

    printf("请输入新节点的姓名和年龄:\n");

    scanf("%s%d",pnew->name,pnew->age);

    pback=phead;                //后结点指向头结点

    pfront=phead->next;         //前结点指向头结点的下一个节点

    while (pfront!=NULL) {

        if (strcmp(name, pfront->name)==0)//找到名字,开始插入

        {

            pback->next=pnew;       //使后结点的下一结点指向新结点

        pnew->next=pfront;          //新结点的下一节点指向前结点

        return;

        }

        pback=pfront;             //后结点设为前结点

        pfront=pfront->next;      //前结点又指向下一结点使前后结点始终保留一个空隙

        

    }

    //如果未找到要插入的结点,将新结点插在链表的最后一个

    pback->next=pnew;

    pnew->next=NULL;

   

    

}

 

 

#include <stdio.h>

#include "shou_note.h"

#include "shou_note.c"

 

int main(int argc, const char * argv[]) {

 

    struct student *phead=NULL;  //链表头指针

    phead=create();              //创建结点

    print(phead);               //输出所有结点

    del(phead, "cc");            //删除名为cc的结点

    printf("删除节点后的情况:");

    print(phead);

    

    insert(phead,"dd");         //在名为dd结点之前插入一个新结点

    printf("插入节点后的借点情况:");

    print(phead);

    

    

    

    

    return 0;

}

    

    

链表的简单操作-----删除,添加,查找(Xcode)

标签:

原文地址:http://www.cnblogs.com/absorption/p/5384162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!