回 帖 发 新 帖 刷新版面

主题:一道编程题用C++实现线性表在顺序存储结构上的插入元素,删除元素运算

[em10]跪求贴友,小妹对C++编程题一窍不通,尤其是数据结构,现在需要求各位帮帮忙“”“”[size=6]用C++实现线性表在顺序存储结构上的插入元素,删除元素运算[/size]“”“”[em59][em59][em59][em59][em59]

回复列表 (共7个回复)

沙发

#include <iostream>
using namespace std;
#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 
#define LISTINCREMENT 10//线性表存储空间的分配增量
typedef int ElemType;
typedef int Status;
#define OK 1
#define OVERFLOW -1
#define ERROR -2

typedef struct//用户自定义结构体SqList
{
 ElemType *elem;//指针指向存储空间基址
 int length;
 int listsize;
}SqList;

//线性表初始化
Status Initlist_Sq(SqList &L)
{
 L.elem=(ElemType * )malloc(LIST_INIT_SIZE*sizeof(ElemType));
 if(!L.elem) exit(OVERFLOW);
 L.length =0;//空表长度为0
 L.listsize=LIST_INIT_SIZE; //初始存储容量
 return OK;
}

//Put 操作
Status Put(SqList &L,int n)
{
  cout<<"向线性表中输入这n个数据:"<<endl;
 for(int i=0;i<n;i++)
  cin>>L.elem[i];
 L.length =L.length +n;
 return OK;


//Out 操作
Status Out(SqList &L,int n)
{
  for(int i=0;i<n;i++)
  cout<<L.elem[i]<<" ";
  cout<<endl;
 return OK;
}

//Insert操作
int *p,*q,*e;
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
  ElemType *newbase;
 if(i<1||i>L.length+1) return ERROR;//i的值不合法
 if(L.length >=L.listsize){    //存储空间已满,增加分配
     newbase=(ElemType*)realloc(L.elem,
               (L.listsize+LISTINCREMENT)*sizeof(ElemType));
     if(!newbase)exit(OVERFLOW);//重新分配失败
     L.elem=newbase;
     L.listsize+=LISTINCREMENT;//增加分配容量
}
q=&(L.elem[i-1]);//q为插入地址
for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;//插入元素后移
*q=e;
++L.length;
return OK;
}

//Delete操作
Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{if((i<1)||(i>=L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for (++p;p<=q;++p) *(p-1)=*p;
--L.length;
return OK;
}

//Search操作
int LocateElem_Sq(SqList L,ElemType f)
{
    int i=1;
    p=L.elem;
    while((i<=L.length)&&!((*p++)==f)) i++;
    if(i<=L.length) return i;
    else return 0;
}

//主函数
int main()
{
  int n,i,k,e,j,f;
  SqList La;
  Initlist_Sq(La);
  cout<<"线性表中的数据个数n(n<=100):"<<endl;
  cin>>n;
  Put(La,n);
  cout<<"该线性表为:"<<endl;
  Out(La,n);
  cout<<"对线性表进行插入操作,请依次输入插入位置i(第i个数据之前),插入数据k:"<<endl;
  cin>>i>>k;
  ListInsert_Sq(La,i,k);
  cout<<"插入后的线性表为:"<<endl;
  Out(La,La.length);
  cout<<"进行删除操作,请输入删除位置j:"<<endl;
  cin>>j;
  ListDelete_Sq(La,j,e);
  cout<<"删除之后的线性表:"<<endl;
  Out(La,La.length);
  cout<<"删除的数据e是"<<e<<endl;
  cout<<"进行查找操作,请输入要查找的数据f:"<<endl;
  cin>>f;
  cout<<"数据f在线性表中的位置:"<<LocateElem_Sq(La,f)<<endl;
  return 0;
}
你在上学?

板凳


// Note:Your choice is C++ IDE
#include "iostream.h"
using namespace std;
#define maxlen 10
typedef struct seqlist
{
    char data[maxlen];
    int last;
}seqlist;

int inslist (seqlist *l, int i ,char x)
{ int j;
    if (l->last==maxlen-1)
    {
        cout<<"顺序表已满!">>;
        return (-1);
    }
    if (i<1||i>l->last+2)
    {
        cout<<"位置出错">>;
        return(0);
    }
    for (j=l->last;j>=i-1;j--)
    l->data[j+1]=l->data[j];
    l->data[i-1]=x;
    l->last++;
    return(1);
}
int dellist(seqlist *l,int i)
{ int j;
    char x;
    if (i<1||i>l->last+2)
    {
        cout<<"位置出错">>;
        return(0);
    }
    x=l->data[i-1];
    for(j=i-1;j<=last->last;j++)
    l->data[j]=l->data[j+1];
    l->last--;
    return(1);
}

        
void main()
{
    int k,i;
    char choice,x;
    seqlist *l;
    l=new seqlist;
    l->last=-1;  
    cout<<"请输入顺序表中的元素:">>;
    for(k=0;k<maxlen;k++)
    cin>>l->data[k];
    for(;;)
    {
        cout<<"请选择要执行的操作:">>;
        cout<<"\n\t\t\t顺序表\t\n">>;
        cout<<"\n\t\t1.插入元素\n">>;
        cout<<"\n\t\t2.删除元素\n">>;
        cin>>choice;
        switch(choice)
        {  
            case '1': cout<<"请输入插入的位置和元素:">>;
                      cin>>i;
                      cin>>x;
                      inslist(l,i,x);
                      break;
            case '2': cout<<"请输入要删除的元素的位置:">>;
                      cin>>i;
                      dellist(l,i);
                      break;
        }
    }
}

3 楼

关于线性表最好用stl中的vector,vector最关键的就是动态扩展和伸缩,

4 楼

#include <iostream>
using namespace std;

#define MAXSIZE 50
class Sq
{
    int elem[MAXSIZE];
    int length;
public:
    Sq();
    ~Sq();
    void Init();
    void Insert(int i,int x);
    void Del(int i);
    void Print();
};
void Sq::Init()
{

}
void Sq::Insert(int i,int x)
{
    if(length>=MAXSIZE-1)
    {
        cout<<"full"<<endl;
        return;
    }
    else
    {
        i=i-1;
        length++;
        
        for(int j=length-1;j>i;j--)
        {
            elem[j]=elem[j-1];
        }
        elem[i]=x;
    }
}
void Sq::Del(int i)
{
    if(i<1||i>length)
        cout<<"error"<<endl;
    else
    {
        
        length--;
        i=i-1;
        for(int j=i;j<length;j++)
        elem[j]=elem[j+1];
    }
}
void Sq::Print()
{
    
    for(int i=0;i<length;i++)
    {

        cout<<" "<<elem[i];
    }
    cout<<endl;
}
Sq::Sq()
{
    length=20;    
    for(int i=0;i<length;i++)
    {

        elem[i]=0;
    }
}
 Sq::~Sq()
{

}

int main()
{
    Sq sq;    
    sq.Print();
    sq.Insert(8,8);
    sq.Print();
    sq.Del(8);
    sq.Print();
  return 0;
}


5 楼


[em2]真不知道该怎么谢谢大家,呵呵,谢谢了,我会继续努力的~~~

6 楼


[em10]貌似好多错误~~不过是小错误,谢谢了!

7 楼


[em12]谢谢了,你的界面比我做的好多了~~~

我来回复

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