Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2244198
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类:

2011-05-19 13:05:43

原文地址:单链表简单实现 作者:luozhiyong131

/*

 * 简单实现单链表功能

 * Lzy 2011-5-15

 */

#include

 

typedef struct node

{

    int data;

    struct node *next;

}LinkList;

 

LinkList *LinkListCreat()

{

    LinkList *head, *p1,*p2;

    head = (LinkList *)malloc(sizeof(LinkList));   /*创建头结点,不保存数据*/

    p1 = head;                                /*p1指向头结点*/

    while(1)

    {

       p2 = (LinkList *)malloc(sizeof(LinkList)); /*分配新的空间*/

       printf("输入要保存的数据:");

       scanf("%d",&p2->data);                    /*保存数据*/

       if(p2->data == -1)                        /*结束输入*/

           break;

       p2->next = NULL;                      /*尾指针置空*/

       p1->next = p2;                            /*添加到链表未尾*/

       p1 = p2;

    }

    return head;

}

 

LinkList *ElemLocatebyNum(LinkList *p,int n)

{

    while(n--)

    {

       p = p->next;

       if(p == NULL)

           return 0;

    }

    return p;

}

 

int LinkListInsert(LinkList *p,int n, int i)

{

    LinkList *ptr = (LinkList *)malloc(sizeof(LinkList));

    p = ElemLocatebyNum(p,n);   /*查找节点*/

    if(p == 0)

       return 0;

    else

    {

       ptr->data = i;           /*插入数据*/

       ptr->next = p->next; /*将插入位置的后继结点指针域赋给新节点指针域*/

       p->next = ptr;           /*将插入位置指针域更改为新节点的指针*/

    }

    return 1;

}

 

int LinkListDelete(LinkList *p,int n)

{

    LinkList *ptr = (LinkList *)malloc(sizeof(LinkList));

    p = ElemLocatebyNum(p,n);

    if(p == 0)

       return 0;

    ptr = p->next;           /*找到要删除的节点*/

    p->next = ptr->next; /*删除该节点*/

    free(ptr);           /*释放空间*/

    return 1;

}

 

int main()

{

    LinkList *p, *head;

 

    head = LinkListCreat();         /*创建链表*/

 

    p = ElemLocatebyNum(head,2);    /*查找链表中第二个元素*/

    printf("找到元素:%d\n",p->data);

 

    LinkListInsert(head,3,10);      /*在第三个元素后插入元素10*/

    p = head;

    while(p->next)

    {

       p = p->next;

       printf("%d ",p->data);     

    }

    printf("\n");

 

    LinkListDelete(head,6);         /*删除第6个元素*/

    p = head;

    while(p->next)

    {

       p = p->next;

       printf("%d ",p->data);     

    }

    printf("\n");

 

    return 0;

}

——部分:Linux C

 

阅读(567) | 评论(0) | 转发(0) |
0

上一篇:二道C语言笔试题

下一篇:单链表简单实现

给主人留下些什么吧!~~