标题:《大话数据结构》读书笔记之线性表基本操作(数组实现)
只看楼主
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
结帖率:46.15%
已结贴  问题点数:20 回复次数:1 
《大话数据结构》读书笔记之线性表基本操作(数组实现)
/*
    Name: 线性表抽象数据类型(使用数组实现)
    Copyright:
    Author: 巧若拙
    Date: 08-09-14 14:38
    Description:
*/

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>

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

typedef int ElemType;
typedef int Status; //函数类型,其值是函数结果状态代码,如OK等

typedef struct{
    ElemType data[MAXSIZE];//数组存储线性表元素
    int length;//线性表元素个数,即线性表长度
} SqList;

Status InitList(SqList *L);//建立一个空的线性表L
Status ListEmpty(SqList L);//若线性表为空,返回TRUE,否则返回FALSE
Status ClearList(SqList *L);//将线性表清空
int ListLength(SqList L);//返回线性表L的元素个数
Status DisplayList(SqList L);//输出线性表L的所有元素
Status GetElem(SqList L, int i, ElemType *e);//将线性表L中第i个位置元素值赋给e
Status LocateElem(SqList L, ElemType e);//在线性表L中查找是否存在与给定值e相等的元素
Status ListInsert(SqList *L, int i, ElemType e);//在线性表L中的第i个位置插入新元素e
Status ListDelete(SqList *L, int i, ElemType *e);//删除线性表L中的第i个位置,并将该元素值赋给e
Status ListSort(SqList *L);//给线性表L排序

int main(void)
{
    SqList a;
    ElemType *p, e = 0;
    int i;
   
    InitList(&a);//建立一个空的线性表
   
    for (i=0; i<MAXSIZE; i++)
    {
        ListInsert(&a, i+1, i+100);
    }
   
    DisplayList(a);
   
    for (i=1; i<ListLength(a); i+=2)
    {
        ListDelete(&a, i, &e);//删除线性表L中的第i个位置,并将该元素值赋给e
    }
    printf("e = %d\n", e);
   
    DisplayList(a);
   
    i = 5;
    e = 50;
    if (LocateElem(a, e))//在线性表L中查找是否存在与给定值e相等的元素
    {
        printf("存在%d\n", e);
    }
    else
    {
        printf("不存在%d\n", e);
        ListInsert(&a, i, e);
    }
   
    DisplayList(a);
   
    ListSort(&a);//给线性表L排序
    DisplayList(a);
   
    return 0;
}

/*
函数功能:建立一个空的线性表L
初始条件:无
操作结果:初始化线性表L。操作成功返回OK,否则返回ERROR  
*/
Status InitList(SqList *L)
{
    L->length = 0;
   
    return OK;
}

/*
函数功能:判断线性表是否为空
初始条件:顺序线性表L已经存在
操作结果:若线性表为空,返回TRUE,否则返回FALSE
*/
Status ListEmpty(SqList L)
{
    return (L.length == 0) ? TRUE : FALSE;
}

/*
函数功能:将线性表清空
初始条件:顺序线性表L已经存在
操作结果:将线性表清空。操作成功返回OK,否则返回ERROR  
*/
Status ClearList(SqList *L)
{
    if (L == NULL)
    {
        return ERROR;
    }
   
    L->length = 0;
    return OK;
}

/*
函数功能:返回线性表L的元素个数
初始条件:顺序线性表L已经存在
操作结果:返回线性表L的元素个数
*/
int ListLength(SqList L)
{
    return L.length;
}

/*
函数功能:输出线性表L的所有元素
初始条件:顺序线性表L已经存在
操作结果:输出线性表L的所有元素。操作成功返回OK,否则返回ERROR
*/
Status DisplayList(SqList L)
{
    int i;
   
    if (L.length == 0)
    {
        printf("none!\n");   
        return ERROR;
    }
   
    for (i=0; i<ListLength(L); i++)
    {
        printf("data[%d] = %d, ", i, L.data[i]);
    }
    printf("\n");
        
    return OK;
}

/*
函数功能:将线性表L中第i个位置元素值赋给e
初始条件:顺序线性表L已经存在,1 <= i <= ListLength(L);
操作结果:将线性表L中第i个位置元素值赋给e。操作成功返回OK,否则返回ERROR
*/
Status GetElem(SqList L, int i, ElemType *e)
{
    if (L.length == 0 || i < 1 || i > L.length)
    {
        return ERROR;
    }
   
    *e = L.data[i-1];
    return OK;
}

/*
函数功能:在线性表L中查找是否存在与给定值e相等的元素
初始条件:顺序线性表L已经存在
操作结果:在线性表L中查找是否存在与给定值e相等的元素。找到返回TRUE,否则返回FALSE
*/
Status LocateElem(SqList L, ElemType e)
{
    int i;
   
    for (i=0; i<L.length; i++)
    {
        if (L.data[i] == e)
        {
            return TRUE;
        }
    }
   
    return FALSE;
}

/*
函数功能:在线性表L中的第i个位置插入新元素e
初始条件:顺序线性表L已经存在,1 <= i <= ListLength(L);
操作结果:在线性表L中的第i个位置插入新元素e,L的长度加1。操作成功返回OK,否则返回ERROR  
*/
Status ListInsert(SqList *L, int i, ElemType e)
{
    int k;
   
    if (L->length == MAXSIZE || i < 1 || i > L->length+1)
    {
        return ERROR;
    }
   
    for (k=L->length; k>=i; k--)
    {
        L->data[k] = L->data[k-1];
    }
   
    L->data[k] = e;
    L->length++;
   
    return OK;
}

/*
函数功能:删除线性表L中的第i个位置,并将该元素值赋给e
初始条件:顺序线性表L已经存在,1 <= i <= ListLength(L);
操作结果:删除线性表L中的第i个位置,并将该元素值赋给e,L的长度减1。
操作成功返回OK,否则返回ERROR  
*/
Status ListDelete(SqList *L, int i, ElemType *e)
{
    int k;
   
    if (L->length == 0 || i < 1 || i > L->length)
    {
        return ERROR;
    }
   
    *e = L->data[i-1];
   
    for (k=i; k<L->length; k++)
    {
        L->data[k-1] = L->data[k];
    }
   
    L->length--;
   
    return OK;
}


/*
函数功能:给线性表L排序
初始条件:顺序线性表L已经存在
操作结果:使线性表L元素按非递减排列。操作成功返回OK,否则返回ERROR  
*/
Status ListSort(SqList *L) //基本插入排序
{
    int i, j;
    ElemType temp;
     
    if (L->length == 0)
    {
        return ERROR;
    }
   
    for (i=1; i<L->length; i++)
    {
        temp = L->data[i];
         for (j=i;(j>0) && (L->data[j-1]>temp); j--)
         {
             L->data[j] = L->data[j-1];
         }
         L->data[j] = temp;
    }
   
    return OK;
}
搜索更多相关主题的帖子: Copyright 读书笔记 include 线性表 
2014-09-08 16:09
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:20 
show code?

我行我乐
我的博客:
http://blog.yuccn. net
2014-09-09 08:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435846-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152328 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved