单链表实现!

原创 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
  • 下载

SDUST-OJ-1681 Problem 求集合的交并补集(不用STL,手写单链表实现)

Problem A: 求集合的交并补集 任意给定两个包含1-30000个元素的集合A,B(集合中元素类型为任意整型数,且严格递增排列),求A交B、A并B、A-B和B-A集合。

单链表的实现

  • 2013-10-06 21:39
  • 215KB
  • 下载

C实现单链表

C实现单链表

单链表实现的队列

单链表实现的队列。
  • nrj
  • nrj
  • 2014-10-12 21:35
  • 397
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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