正文

练习:顺序表的所有操作2006-05-31 02:55:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/15236.html

分享到:

/*
实验一
文件名:SeqList.cpp
该程序参考网上的一个实验要求编写,用于实验线形表的各种操作
在VC6.0中模拟C环境运行
作者:hanshuyujifen
日期:2006.05.29
*/

#include <cstdio>
#include <iostream>
using namespace std;

/* 定义DataType为int类型 */
typedef int DataType;

/*顺序表存储空间的总分配量*/
#define MAXSIZE 100

/* 顺序存储类型 */
typedef struct
{
    DataType data[MAXSIZE]; /*存放线性表的数组*/
    int length;               /* length是顺序表的长度*/
}SeqList;

 

/* 初始化顺序表 */
SeqList SeqListInit()
{
    SeqList L;
    L.length=0;
    return L;
}
 
/* 清空顺序表 */

SeqList ListClear(SeqList L)
{
    L.length=0;
    return L;
}

/* 求顺序表长度 */
int ListLength(SeqList L)
{
    return(L.length);
}

/* 检查顺序表是否为空 */
int ListEmpty(SeqList L)
{
    if(L.length==0)return 1;
    else return 0;
}

/*检查顺序表是否为满 */
int ListFull(SeqList L)
{
    if(L.length==MAXSIZE)
        return 1;
    else return 0;
}

/* 遍历顺序表 */
void ListTraverse(SeqList L)
{
    int i;
    if(L.length<=0)
        printf("表空");
    else{
        printf("当前顺序表中的元素为:\n");
        for(i=1;i<L.length+1;i++)
            printf("%d ",L.data[i-1]);
        printf("\n");
    }


/* 从顺序表中查找第i个元素 */
DataType ListGet(SeqList L ,int i)
{
    return(L.data[i-1]);


/* 从顺序表中查找与给定元素值相同的元素在顺序表中的位置 */
int ListLocate(SeqList L, DataType x)
{
    int i=0;
    while(i<L.length&&L.data[i-1]!=x)
        i++;
    if(i<L.length)return(i+1);
    else return 0;
}

/* 向顺序表中插入元素 */
SeqList ListInsert(SeqList L,int i,DataType x)
{
    int j=0;
    if(L.length==MAXSIZE)
        printf("表满,不能插入\n");
    else if(i<1||i>(L.length+1))
        printf("插入位置不正确\n");
    else{
        for(j=L.length-1;j>=i-1;j--)
            L.data[j+1]=L.data[j];
        L.data[i-1]=x;
        L.length++;
    }
    return L;


/* 从顺序表中删除元素 */
SeqList ListDelete(SeqList L,int i)  
{
    int j=0;
    if(i<=0||i>L.length)
        printf("删除位置不正确\n");
    else{
        for(j=i;j<=L.length;j++)
            L.data[j-1]=L.data[j];
    }
    printf("第%d个元素已被删除\n",i);
        L.length--;
    return L;
}

/*求顺序表中元素的前驱*/
DataType ListPrior (SeqList L,DataType e)
{//找到元素e,并返回其前一个元素
    int i=0;
    while(i<L.length&&L.data[i]!=e)
        i++;
    if(i<L.length-1)
        return L.data[i-1];
    else if(i==0)
    {
        printf("第一个元素,没有前驱\n");
        return 0;
    }
    else 
    {
        printf("没有找到值为%d的元素",e);
        return 0;
    }
}

/*求顺序表中元素的后继*/
DataType ListNext(SeqList L,DataType e)
{//找到元素e,并返回其后一个元素
    int i=0;
    while(i<L.length&&L.data[i]!=e)
        i++;
    if(i==L.length-1)
    {
        printf("最后一个元素,没有后继\n");
        return 0;
    }
    else if(i<L.length-1)
    {
        return(L.data[i]);
    }
    else
    {
        printf("没有找到值为%d的元素\n",e);
        return 0;
    }
}

void main()
{
    int i;
    SeqList L;
    L=SeqListInit();
    printf("%d\n",ListLength(L));
    for(i=0;i<MAXSIZE;i++)
    {
        L=ListInsert(L,i+1,MAXSIZE-i);
        printf("%d ",L.length);
    }
    printf("\n");
    ListTraverse(L);
    printf("%d\n",ListLength(L));
    L=ListClear(L);
    printf("%d\n",ListLength(L));
}

阅读(3172) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册