首页 > 代码库 > 链式存储(头插法、尾插法)

链式存储(头插法、尾插法)

#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 20 // 存储空间初始分配量

typedef int Status;// Status是函数的类型,其值是函数结果状态代码。如OK等
typedef int ElemType;//ElemType类型依据实际情况而定,这里如果为int


Status visit(ElemType c)
{
    printf("%d ",c);
    return OK;
}

typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node *LinkList; // 定义LinkList

// 初始化顺序线性表
Status InitList(LinkList *L)
{
    *L=(LinkList)malloc(sizeof(Node)); // 产生头结点,并使L指向此头结点
    if(!(*L)) // 存储分配失败
            return ERROR;
    (*L)->next=NULL; //指针域为空

    return OK;
}

//初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
Status ListEmpty(LinkList L)
{
    if(L->next)
            return FALSE;
    else
            return TRUE;
}

// 初始条件:顺序线性表L已存在。

操作结果:将L重置为空表 Status ClearList(LinkList *L) { LinkList p,q; p=(*L)->next; // p指向第一个结点 while(p) // 没到表尾 { q=p->next; free(p); p=q; } (*L)->next=NULL; // 头结点指针域为空 return OK; } // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 int ListLength(LinkList L) { int i=0; LinkList p=L->next; // p指向第一个结点 while(p) { i++; p=p->next; } return i; } //初始条件:顺序线性表L已存在,1≤i≤ListLength(L) //操作结果:用e返回L中第i个数据元素的值 Status GetElem(LinkList L,int i,ElemType *e) { int j; LinkList p; // 声明一结点p p = L->next; // 让p指向链表L的第一个结点 j = 1; // j为计数器 while (p && j<i) // p不为空或者计数器j还没有等于i时,循环继续 { p = p->next; // 让p指向下一个结点 ++j; } if ( !p || j>i ) return ERROR; // 第i个元素不存在 *e = p->data; // 取第i个元素的数据 return OK; } // 初始条件:顺序线性表L已存在 // 操作结果:返回L中第1个与e满足关系的数据元素的位序。 //若这种数据元素不存在。则返回值为0 int LocateElem(LinkList L,ElemType e) { int i=0; LinkList p=L->next; while(p) { i++; if(p->data=http://www.mamicode.com/=e) // 找到这种数据元素>

链式存储(头插法、尾插法)