主题:一道编程题用C++实现线性表在顺序存储结构上的插入元素,删除元素运算
yaoyao778269448
[专家分:0] 发布于 2008-10-19 22:20:00
[em10]跪求贴友,小妹对C++编程题一窍不通,尤其是数据结构,现在需要求各位帮帮忙“”“”[size=6]用C++实现线性表在顺序存储结构上的插入元素,删除元素运算[/size]“”“”[em59][em59][em59][em59][em59]
回复列表 (共7个回复)
沙发
775901421 [专家分:50] 发布于 2008-10-20 19:37:00
#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;
}
你在上学?
板凳
xy6219536 [专家分:0] 发布于 2008-10-23 20:26:00
// 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 楼
hhgirl [专家分:70] 发布于 2008-11-05 22:15:00
关于线性表最好用stl中的vector,vector最关键的就是动态扩展和伸缩,
4 楼
x2605050128 [专家分:20] 发布于 2008-11-13 15:19:00
#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 楼
yaoyao778269448 [专家分:0] 发布于 2008-12-15 12:26:00
[em2]真不知道该怎么谢谢大家,呵呵,谢谢了,我会继续努力的~~~
6 楼
yaoyao778269448 [专家分:0] 发布于 2008-12-15 12:39:00
[em10]貌似好多错误~~不过是小错误,谢谢了!
7 楼
yaoyao778269448 [专家分:0] 发布于 2008-12-15 12:42:00
[em12]谢谢了,你的界面比我做的好多了~~~
我来回复