回 帖 发 新 帖 刷新版面

主题:求数据结构编程

#include "Lineast.h"

/*抽象数据类型的操作实现*/
void InitList(SqList *L) /*初始化线性表*/
{
    L->Length=0;
}

void CreateList(SqList *L) /*创建线性表*/
{
    int i,ok;
    ElemType e;

    InitList(L);
    i=0;
    printf("input end while enter -9999!\n");
    while(1)
    {
        scanf("%d",&e);
        if(e!=-9999)
        { ok=InsertElem(L,++i,&e);
          if(!ok) break;
        }
        else
          break;
    }
    L->Length=i;
}

int GetLength(SqList *L)  /*获得线性表的长度*/
{
    return L->Length;
}

int GetElem(SqList *L,int i,ElemType *e)  /*取线性表第i个表元素,并放在e指向的的内存中*/
{
   if(i<1||i>GetLength(L)) 
       return 0;
   *e=L->data[i];
   return 1;
}

int SetElem(SqList *L,int i,ElemType *e)  /*修改第i个表元素*/
{
   if(i<1||i>GetLength(L)) 
       return 0;
   L->data[i]=*e;
   return 1;
}

int InsertElem(SqList *L,int i, ElemType *e)   /*在第i个位置插入元素,插入成功返回1*/
{
    int j;
    /*请在以下部分插入程序代码*/





    /*插入代码结束*/
    return 1;
}

int DeleteElem(SqList *L,int i)  /*删除第i个元素,删除成功返回1*/
{
    int j;
    int n=GetLength(L);
    /*请在以下部分插入程序代码*/
    
    
    
    /*插入代码结束*/
    return 1;
}

int SearchElem(SqList *L,ElemType *e) /*查找元素*e的位置j,找到返回,找不到返回-1,表示查找失败*/
{
    int j;
    int n=GetLength(L);
    /*请在下面插入你的代码*/
       


    /*插入代码结束*/
    return j<=n?j:-1;
}

int TraversList(SqList *L)   /*遍历线性表*/
{
    int j;
    int n=GetLength(L);
    ElemType e;

    if(n==0)
    {        printf("Lineast is Empty!!!\n");
            return 0;
    }
    for(j=1;j<=n;j++)
    { GetElem(L,j,&e);
      printf("%6d",e);
    }
    return 1;
}

void ClearList(SqList *L)    /*清除线性表*/
{
    L->Length=0;
}

/*  以下为补充顺序表逆置操作实现 */



/*   补充结束      */

回复列表 (共3个回复)

沙发

你这是让别人帮你做题吗?这是线性表基于数组的存储表示(即顺序表),好多课本上都有这些的函数的实现,找本好好看看!

板凳

给你一个顺序表作为参考,不过还得自己理解消化!
[code=c]
#include<iostream.h>
const int defaultSize=10;
//顺序表(cSeqList)类(模板)的定义
template <class Type>
class cSeqList {
private:
    Type *data;  //数组的顺序存储结构
                 //data指向首地址
    int MaxSize; //数组空间长度(能容纳的元素数)    
    int last;      //当前数组最后元素下标(从0起)
public:
    //构造函数(可缺省参数)
    cSeqList ( int MaxSize = defaultSize );
    //析构函数
    ~cSeqList ( ) { delete [ ] data; }    
    //求线性表的长度
    int Length ( ) const { return last+1; }
    //求线性表的空间
    int getMaxSize ( ) { return MaxSize; }
    //在表中从前向后顺序查找 x
    int Find ( Type x ) const; 
    //定位到第i个元素
    Type * Locate ( int i ) const;    
    //得到第i个元素
    Type GetElement ( int i ) const;
    //在表中第 i 个位置插入新元素 x 
    bool Insert ( Type x, int i );  
    //删除表中的已有元素 x
    bool Remove ( Type x );    
    //定位到元素x的后继
    Type * Next ( Type x ) ;           
    //定位到元素x的前驱
    Type * Prior ( Type x ) ;
    //替换元素x
    bool Replace ( int i , Type x ) ;
    //判断线性表是否为空表
    bool IsEmpty ( ) { return last ==-1; }    
    //判断线性表是否为满表
    bool IsFull ( ) { return last == MaxSize-1; }
    //显示输出线性表
    void display () const;            
};       
[/code]
接下面的函数实现!

3 楼

[code=c]
//构造函数(可缺省参数)                    
template <class Type>              
cSeqList<Type> :: cSeqList ( int size ) 
{                   //参数:空间大小
    if ( size <= 0 ) return;  //参数不合理
    MaxSize = size;  //空间大小
    last = -1;       //约定空表的标志        
    data = new Type[MaxSize];
    if ( data == NULL ) {  //分配失败
        MaxSize = 0;   last = -1;
    }        
}
//向线性表中插入元素
template <class Type>              
bool cSeqList<Type> :: Insert ( Type  x, int i )
{               //参数:待插入的元素,插入位置
    if ( IsFull ( ) ) return false;  //表满    
    if ( i < 0 || i > last+1 )
        return false;   //插入位置不合适
    //有不允许元素重复的要求时
    if ( Find ( x ) >= 0 ) return false;
    last++;                            
    for ( int j = last; j > i; j-- )
        data[j] = data[j-1];        
    data[i] = x;   
    return true;    //插入成功       
}
//查找函数:在表中从前向后顺序查找 x
template <class Type>
int cSeqList<Type> :: Find ( Type  x ) const 
{                    //参数:待查元素
     int  i = 0;
     while ( i <= last && data[i] != x ) 
         i++;        
     if ( i > last ) return -1;                
     else return i;        //返回x的序号            
}
//在表中删除已有元素
template <class Type>
bool cSeqList<Type> :: Remove ( Type x )
{                       //参数:待删元素
    int i = Find (x);    //查找x的位置
    if ( i < 0 ) return false;    //表中没有 x                            
    for ( int j = i; j < last; j++ ) 
              data[j] = data[j+1];                           
    last--;  
    return true;    //成功删除                 
}
//定位到第i个元素
template <class Type>
Type * cSeqList<Type> ::Locate ( int i ) const
{                       //参数:元素序号
    return i < 0 || i > last ? NULL : data+i;
    //返回第i个元素的地址
}
//得到第i个元素
template <class Type>
Type cSeqList<Type> ::GetElement ( int i ) const            
{                      //参数:元素序号
    return i < 0 || i > last ? NULL : data[i];
    //返回第i个元素的值
}
//定位到元素x的后继
template <class Type>
Type * cSeqList<Type> ::Next ( Type x )
{                       //参数:元素x
    int i = Find (x);    //查找x的位置
    return ( i == -1 || i == last ) ? NULL : data+i+1;
    //返回元素x的后继的地址
}
//定位到元素x的前驱
template <class Type>
Type * cSeqList<Type> ::Prior ( Type x )
{                       //参数:元素x
    int i = Find (x);    //查找x的位置
    return ( i < = 0 ) ? NULL : data+i-1;
    //返回元素x的前驱的地址
}
//把第i个元素替换为x
template <class Type>
bool cSeqList<Type> ::Replace ( int i , Type x )
{                       //参数:序号i , 元素x
    if ( i <0 || i > last)  return false;
    data[i]=x;
    return true;
}
//显示输出线性表
template <class Type>
void cSeqList<Type> ::display () const
{
    cout<<"MaxSize="<<MaxSize<<'\n';
    cout<<"last="<<last<<'\n';
    for(int i=0;i<=last;i++)
        cout<<data[i]<<" ";
    cout<<endl;
}
//主函数
int main()
{
    cSeqList <char> s1(5); //模板类  对象
    char v;
    //键盘接受,插入元素
    for(int i=0;i<s1.getMaxSize();i++) {
        cout<<"请输入第"<<i+1<<"个元素:";
        cin>>v;
        s1.Insert(v,i);
    }
    s1.display ( );
}
[/code]

我来回复

您尚未登录,请登录后再回复。点此登录或注册