| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15410 人关注过本帖, 1 人收藏
标题:请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解 ...
只看楼主 加入收藏
爱学习的蟋蟀
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-9-28
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:2 
请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解,希望大家能帮这个小忙
如题
搜索更多相关主题的帖子: 课程 最好 
2011-10-19 15:05
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:20 
程序代码:
#include<stdio.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType elem[MAXSIZE];
    int length;
}SqList;//顺序表结构定义
void InitList(SqList &L)
{
    //初始化函数
    //操作结果:构造一个空在顺序线性表
    L.length=0;
    return;
}
void ClearList(SqList &L)
{
    //清表函数
    //操作结果:将L置为空表
    L.length=0;
    return;
}
int ListLength(SqList L)
{
    //求表长函数
    //操作结果:返回表中元素个数
    return L.length;
}
int ListEmpty(SqList L)
{
    //判空函数
    //初始条件:顺序线性表L已存在
    //操作结果:如果不空返回0,否则返回非0值
    if(L.length==0)return 1;
    else
        return 0;
}
/////////////////////////////
int GetElem(SqList L,int i,ElemType &e)
{
    //取元素函数
    //初始条件:顺序线性表L已存在,1<=i<=ListLength(L)
    //操作结果:用e返回L中第i个元素的值
    if(i<1||i>L.length)
    {
        printf("i值越界!\n");
        return 0;
    }
    e=L.elem[i-1];
    return 1;
}
int LocateElem(SqList L,ElemType e)
{
    //定位函数
    //初始条件:顺序线性表L已存在,e为指定的查找元素
    //操作结果:返回L中第1个与e相等的元素位序,若这样在元素不存在,则返回0
    int i=0;
    while(i<L.length&&L.elem[i]!=e)
        ++i;
    if(i<=L.length)
        return i;
    else
        return 0;
}
int PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
    //求前驱函数
    //初始条件:顺序表已存在
    //操作结果:若存在元素cur_e,且是第一个元素,返回0;若不是第一个元素,则返回前驱元素的值
    int i;
    i=LocateElem(L,cur_e);
    if(i)
    {
        //
        if(i==1)
        {
            printf("这是第一个元素,没有前驱!!!\n");
            return 0;//操作失败
        }
        else
        {
            pre_e=L.elem[i-1];
            return 1;
        }
    }
    else
    {
        printf("中不存在此元素!\n");
        return 0;//操作失败
    }
}
int NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{
    //求后继函数
    //初始条件:顺序表已存在
    //操作结果:若存在元素cur_e,且是最后一个元素,返回0;若不是最后一个元素,则返回后继元素的值
    int i;
    i=LocateElem(L,cur_e);
    if(i)
    {
        //
        if(i==L.length-1)
        {
            printf("这是最后一个元素,没有后继!!!\n");
            return 0;//操作失败
        }
        else
        {
            next_e=L.elem[i+1];
            return 1;
        }
    }
    else
    {
        printf("不存在此元素!\n");
        return 0;//操作失败
    }
}

int ListInsert(SqList &L,int i,ElemType e)
{
    //插入函数
    //初始条件:顺序线性表L已存在,1<=i<=ListLength(L)+1
    //操作结果:在L中第i个位置前插入新的数据元素e,L的长度加1
    int j;
    if(i<1||i>L.length+1)
    {
        printf("插入越界!\n");
        return 0;//插入失败
    }
    if(L.length>=MAXSIZE)
    {
        printf("顺序上溢!\n");
        return 0;//插入失败
    }
    for(j=L.length-1;j>=i-1;--j)
    {
        L.elem[j+1]=L.elem[j];
    }
    L.elem[i-1]=e;
    ++L.length;
    return 1;//成功插入
}
int ListDelete(SqList &L,int i,ElemType &e)
{
    int j;
    if(i<1||i>L.length)
    {
        printf("i值越界!");
        return 0;//操作失败
    }
    if(ListEmpty(L))
    {
        printf("L为空表,不能执行删除操作!\n");
        return 0;//操作失败
    }
    e=L.elem[i-1];
    for(j=i;j<=L.length-1;j++)
    {
        L.elem[j-1]=L.elem[j];
    }
    L.length--;
    return 1;//操作成功
}//
void ListTraverse(SqList L)
{
    //输出函数
    //初始条件:顺序表衣襟存在
    //操作结果:若顺序表非空,则输出顺序表中所有元素,否则为空操作
    int i;
    for(i=0;i<L.length;i++)
    {
        printf("%5d",L.elem[i]);
    }
    return;
}



int main(void)
{
    SqList L;
    int i,s,e;
    InitList(L);/////////创建一个空的顺序表L
    if(ListEmpty(L))
    {
        printf("顺序表L是一个空表!\n");
    }
    else
    {
        printf("顺序表L不是一个空表!\n");
    }
    ///////////////////////////////////////////////////if语句的输出结果为:
    printf("\n1~10:\n");
    for(i=1;i<=10;i++)
    {
        ListInsert(L,1,i);///////调用插入函数
    }
    ListTraverse(L);///////////////////////////////////输出结果为:
    printf("\n删除指定的元素(输入序号):");
    scanf("%d",&i);
    ListDelete(L,i,e);
    printf("\n删除的第%d个元素的值为%d\n",i,e);
    printf("\n删除后元素后顺序表中的元素值为:\n");
    ListTraverse(L);
    printf("\n查找前驱操作:\n");
    printf("\n输入元素:");
    scanf("%d",&s);
    if(!PriorElem(L,s,e))
    {
        printf("\n元素%d没有前驱!\n",s);
    }
    else
    {
        printf("\n元素%d的前驱为:%d\n",s,e);
    }
    printf("\n查找后继元素操作:\n");
    printf("\n输入元素:\n");
    scanf("%d",&s);
    if(!NextElem(L,s,e))
    {
        printf("\n元素%d没有后继!\n",s);
    }
    else
    {
        printf("\n元素%d的后继为:%d\n",s,e);
    }
/*    printf("\n\n");
    printf("");
    scanf("%d",&s);
    if(!NextElem(L,s,e))
    {
        printf("\n%\n",s);
    }
    else
    {
        printf("\n%d%d\n",s,e);
    }*/
    printf("\n");
    return 0;
}
2011-10-20 00:04
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
请问你是大二的吗?加我为好友,一起学习数据结构与算法~嘻嘻~
2011-10-20 00:05
快速回复:请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加 ...
数据加载中...
 
   



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

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