第三周项目一(3)

/* 
烟台大学计算机学院 
 
文件名称:main.cpp ti.cpp head.h 
 
作者:王硕
 
完成日期:2017年9月20日 
 
问题描述:顺序表插入,删除,初始化,销毁 
 
输入描述:无 
 
输出描述:无
 
*/  
#include <iostream>
#include <stdio.h>
#include "head.h"
using namespace std;
int main()
{ SqList *sq;

 ElemType x[6]= {5,8,7,2,4,9};
 ElemType a;
 ElemType b;
 ElemType c,d;

    CreateList(sq, x, 6);
      if(ListEmpty(sq))
        cout<<"此链表为空!";
      else DispList(sq);
        cout<<"此链表的长度为:"<<ListLength(sq)<<endl;//测试此链表的长度

        cout<<"输出此链表的第三个和第六个元素:"<<endl;
          if(GetElem(sq,3,a)) //求某个数据元素值GetElem(L,i,e)
              { cout<<"已找到第三个,为:"<<a<<endl; }
          else cout<<"未找到。"<<endl;

          if(GetElem(sq,6,b))
              { cout<<"已找到第六个,为:"<<b<<endl; }
          else cout<<"未找到。"<<endl;

              cout<<"值为9的元素位置为:"<<LocateElem(sq,9)<<endl;

             cout<<"在第二个位置上插入6"<<endl;
              ListInsert(sq,2,6);//在第二个位置上插入6
              DispList(sq);cout<<endl;
              cout<<"将第二个位置上的元素删除"<<endl;
              ListDelete(sq,2,d);//将第二个位置上的元素删除
              DispList(sq);cout<<endl;
              cout<<"初始化线性表后输出:"<<endl;
              InitList(sq);//初始化线性表
              DispList(sq);cout<<endl;
              cout<<"销毁线性表后输出:"<<endl;
              DestroyList(sq);//销毁线性表DestroyList(L)
              DispList(sq);


return 0;}


//ti.cpp

#include <stdio.h>
#include <malloc.h>
#include "head.h"

//用数组创建线性表
void CreateList(SqList *&L, ElemType a[], int n)
{
    int i;
    L=(SqList *)malloc(sizeof(SqList));
    for (i=0; i<n; i++)
        L->data[i]=a[i];
    L->length=n;
}

//初始化线性表InitList(L)
void InitList(SqList *&L)   //引用型指针
{
    L=(SqList *)malloc(sizeof(SqList));
    //分配存放线性表的空间
    L->length=0;
}

//销毁线性表DestroyList(L)
void DestroyList(SqList *&L)
{
    free(L);
}

//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
    return(L->length==0);
}

//求线性表的长度ListLength(L)
int ListLength(SqList *L)
{
    return(L->length);
}

//输出线性表DispList(L)
void DispList(SqList *L)
{
    int i;
    if (ListEmpty(L)) return;
    for (i=0; i<L->length; i++)
        printf("%d ",L->data[i]);
    printf("\n");
}

//求某个数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i,ElemType &e)
{
    if (i<1 || i>L->length)  return false;
    e=L->data[i-1];
    return true;
}

//按元素值查找LocateElem(L,e)
int LocateElem(SqList *L, ElemType e)
{
    int i=0;
    while (i<L->length && L->data[i]!=e) i++;
    if (i>=L->length)  return 0;
    else  return i+1;
}

//插入数据元素ListInsert(L,i,e)
bool ListInsert(SqList *&L,int i,ElemType e)
{
    int j;
    if (i<1 || i>L->length+1)
        return false;   //参数错误时返回false
    i--;            //将顺序表逻辑序号转化为物理序号
    for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置
        L->data[j]=L->data[j-1];
    L->data[i]=e;           //插入元素e
    L->length++;            //顺序表长度增1
    return true;            //成功插入返回true
}

//删除数据元素ListDelete(L,i,e)
bool ListDelete(SqList *&L,int i,ElemType &e)
{
    int j;
    if (i<1 || i>L->length)  //参数错误时返回false
        return false;
    i--;        //将顺序表逻辑序号转化为物理序号
    e=L->data[i];
    for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移
        L->data[j]=L->data[j+1];
    L->length--;              //顺序表长度减1
    return true;              //成功删除返回true
}

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED

#define MaxSize 50
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int length;
} SqList;
void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
void InitList(SqList *&L);//初始化线性表InitList(L)
void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
int ListLength(SqList *L);//求线性表的长度ListLength(L)
void DispList(SqList *L);//输出线性表DispList(L)
bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)
int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED
#endif



运行结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值