链表

来源:互联网 发布:安装ubuntu出错404 编辑:程序博客网 时间:2024/05/18 11:46

#include<string.h>#include<malloc.h> /* malloc()等 */#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<math.h> /* floor(),ceil(),abs() *//* 函数结果状态代码 */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */typedef int ElemType;        // 定义元素的类型为整型//定义链表struct LNode{    ElemType data;    struct LNode *next;};typedef struct LNode *LinkList; /* 另一种定义LinkList的方法 *///返回第i个元素Status GetElem(LinkList L,int i,ElemType *e) {    /* L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR */    int j=1; /* j为计数器 */    LinkList p=L->next; /* p指向第一个结点 */    while(p&&j<i) /* 顺指针向后查找,直到p指向第i个元素或p为空 */    {        p=p->next;        j++;    }    if(!p||j>i) /* 第i个元素不存在 */        return ERROR;    *e=p->data; /* 取第i个元素 */    return OK;}//在第i个位置插入eStatus ListInsert(LinkList L,int i,ElemType e){    /* 在带头结点的单链线性表L中第i个位置之前插入元素e */    int j=0;    LinkList p=L,s;    while(p&&j<i-1) /* 寻找第i-1个结点 */    {        p=p->next;        j++;    }    if(!p||j>i-1) /* i小于1或者大于表长 */        return ERROR;    s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */    s->data=e; /* 插入L中 */    s->next=p->next;    p->next=s;    return OK;}//第i个元素,并由e返回其值Status ListDelete(LinkList L,int i,ElemType *e) {    /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */    int j=0;    LinkList p=L,q;    while(p->next&&j<i-1)  /*寻找第i个结点,并令p指向其前趋 */    {        p=p->next;        j++;    }    if(!p->next||j>i-1) /* 删除位置不合理 */        return ERROR;    q=p->next; /* 删除并释放结点 */    p->next=q->next;    *e=q->data;    free(q);    return OK;}// 显示链表中的元素,返回值为链表元素的数目int ShowList(LinkList L){    int numOfList = 0;                // 记录链表中元素的数目    LinkList p = L->next;        // 用来遍历链表元素的指针    while(p)                                 // 如果该结点不为空    {        if(numOfList)                 // 如果该元素不是列表中的第一个元素(先判断值是否为0,然后加1)        {            putchar(' ');        }        numOfList++;                // 元素的数目加1        printf("%d",p->data);        // 输出元素        p = p->next;                // 指针向后移动    }    if(numOfList == 0)                 // 如果链表中的元素数目为0,说明是空链表    {        return 0;    }    else    {        putchar('\n');                // 注意换行        return numOfList;        // 返回链表中元素的数目    }}


害羞

0 0