单链表实现!

原创 2013年12月03日 23:37:47

linklist.h

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

typedef  int  ElementType;

struct  linklist;
typedef  struct  linklist  *LinkList;
typedef  LinkList  Position;

/**< 函数如无返回值,且须改变参数值时,课使用二级指针 */
/**< 有返回值使用以及指针即可,传值调用即体现在此,指针亦不例外 */
LinkList  CreatLinkList(LinkList L,int N);  /**< 创建链表,长度为N,函数如无返回值参数需用二级指针 */
void  PrintLinkList(LinkList  L);       /**< 打印链表 */
LinkList  DeleteLinkList(LinkList  L);    /**< 销毁整表 */
int  IsEmpty(LinkList  L);                   /**< 表是否为空 */
int  IsLast(Position  P, LinkList  L);   /**< 位置P是否为最后 */
Position  Find(ElementType  X, LinkList  L);   /**< 查找元素X的位置 */
Position  FindPrevious(ElementType  X, LinkList  L);  /**< 查找元素X之前的位置 */

LinkList  Delete(ElementType  X, LinkList  L);   /**< 删除元素X */
LinkList  Insert(ElementType  X, LinkList  L);    /**< 插入元素X */
#endif // LINKLIST_H_INCLUDED

linklist.c

#include  <stdio.h>
#include  <malloc.h>
#include  <time.h>
#include  <math.h>
#include  <io.h>
#include  "linklist.h"

struct  linklist
{
    ElementType  data;
    LinkList  next;
};
 /**< 创建链表 */
LinkList  CreatLinkList(LinkList  L,int  n)
{
    LinkList  P;
    int i;

    L=(LinkList)malloc(sizeof(struct linklist));
    if(L==NULL)
        printf("out of  space!!!");
    L->next =NULL;

    for(i=0;i < n;i++)
    {
        P=(LinkList)malloc(sizeof(struct linklist));
        P->data=rand()%100+1;
        P->next =L->next;
        L->next =P;
    }

    return L;

}

  /**< 打印链表 */
void  PrintLinkList(LinkList  L)
{
    Position  P;
    P=L->next;
    while(P!=NULL)
    {
        printf("%d\t",P->data);
        P=P->next;
    }
}

/**< 销毁整表 */
LinkList  DeleteLinkList(LinkList  L)
{
    LinkList  temp,P;
    P=L->next;

    while(P)
    {
        temp=P->next;   /**< temp=P;free(P);P=temp->next; this is wrong,  temp must  point to the next  node*/
        free(P);
        P=temp;
    }

    L->next =NULL;

    return L;
}

                  /**< 表是否为空 */
int  IsEmpty(LinkList  L)
{
    return  L->next==NULL;
}

   /**< 位置P是否为最后 */
int  IsLast(Position  P, LinkList  L)
{
    return  P->next ==NULL;
}

  /**< 查找元素X的位置 */
Position  Find(ElementType  X, LinkList  L)
{
    LinkList  P;
    P=L->next;

    while(P != NULL  && P->data !=X)
    {
        P=P->next;
    }

    return  P;
}

 /**< 查找元素X之前的位置 */
Position  FindPrevious(ElementType  X, LinkList  L)
{
    LinkList  P;
    P=L;       /**< P=L->next;如此写不能正确删除首位数据 */

    while(P ->next!= NULL  && P->next->data !=X)
    {
        P=P->next;
    }

    return  P;
}

 /**< 删除元素X */
LinkList  Delete(ElementType  X, LinkList  L)
{
    Position  P,temp;
    P=FindPrevious(X,L);
    temp=P->next;
    P->next =temp->next;
    free(temp);

    return  L;
}

    /**< 插入元素X */
LinkList  Insert(ElementType  X, LinkList  L)
{
    Position  P,temp;

    temp=(LinkList)malloc(sizeof(struct linklist));
    P=L->next;
    temp->data =X;
    temp->next=P;
    L->next =temp;

    return  L;
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include  "linklist.c"


int main()
{
    LinkList  L;
    L=(LinkList)malloc(sizeof(struct linklist));
    L=CreatLinkList(L,12);
    PrintLinkList(L);
    putchar(10);   /**< printf('\n');这一句为何会警告? */
    printf("\n");     /**< 该函数参数为指针,需用双引号 */

    L=Delete(46,L);
    PrintLinkList(L);
    putchar(10);

    L=Insert(17,L);
    PrintLinkList(L);

    DeleteLinkList(  L);
    getchar();
    return 0;
}
个别地方还不是太完整。

单链表的实现-简单操作

  • 2016年11月18日 22:50
  • 401KB
  • 下载

单链表的增删排序求长度的实现。

对于链表,我们可以知道他和算法会有相关。我们至少通过两组结构来存储:数组和链表。 接下来,我们来进行单链表的实现 在这里,我们可以进行增加,删除,求长度,排序。#define _CRT_SECUR...

c语言单链表的实现及测试

  • 2017年07月20日 13:47
  • 2KB
  • 下载

单链表的实现

  • 2013年10月06日 21:39
  • 215KB
  • 下载

Python 实现一个全面的单链表

前言 实现清单 链表实现 总结前言算法和数据结构是一个亘古不变的话题,作为一个程序员,掌握常用的数据结构实现是非常非常的有必要的。实现清单实现链表,本质上和语言是无关的。但是灵活度却和实现它的语言密切...

O n 复杂度实现单链表的逆转

  • 2014年08月11日 10:35
  • 2KB
  • 下载

基本数据结构(C#实现):单链表

线性表的链式存储结构:n个结点链接成一个链表,每个结点由两部分构成:数据元素本身信息和其直接后 继元素的存储位置。单链表:一个SingleLinkList类,里面封装所有关于链表的基本操作(方法)...
  • lzuwds
  • lzuwds
  • 2015年04月23日 14:54
  • 275

基于JAVA的单链表简单实现

  • 2013年01月05日 23:07
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单链表实现!
举报原因:
原因补充:

(最多只允许输入30个字)