设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:建立一个线性表,首先依次输人数据元素1,2,3,…,10,然后删除数据元素6,最后依次显示当前线性表中的数据元素。要求采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。
不知道这个程序能不能满足你的要求,该程序用顺序表方式,能实现删除线性表的元素,之后还可以往线性表中插入元素,后附有运行情况图:
程序如下
#include<iostream>
using namespace std;
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef int KeyType;
typedef struct{
ElemType *elem;
KeyType *key;
int length;
int listsize;
}SqList;
typedef struct{
KeyType key;
}SElemType;
Status InitList (SqList &L){ /*定义一个线性表*/
int length1;
printf("请确定顺序表的长度:");
scanf("%d",&length1);
L.listsize=length1;
L.elem=(ElemType*)malloc(length1*sizeof(ElemType));
if(!L.elem){
printf("out of space");
exit(OVERFLOW);
}
L.length=0;
return OK;
}
Status Listinsert (SqList &L,int i, ElemType e){ /*在i元素的前面插入元素e*/
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1){
return ERROR;
}
if(L.length>L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if (newbase==NULL){
printf("out of space");
return (OVERFLOW);
}
L.listsize+=LISTINCREMENT;
}
p=&( L.elem[i-1]);
for (q=&(L.elem[L.length-1]) ;q>=p;q--){
*(q+1)=*q;
}
L.elem[i-1]=e;
L.length++;
return OK;
}
Status DeleteList (SqList &L,int i){/*删除i个元素*/
ElemType *q ,*p;
if(i<1||i>L.length){
return ERROR;
}
q = &(L.elem[i-1]);
p = L.elem+L.length-1;
for (q++; q <= p; q++){
*(q-1) = *q;
}
L.length--;
return OK;
}
int main(){
SqList L;
int i,e;
InitList (L);
printf("请向表中置入元素:\n");
for(i=0;i<L.listsize;i++){
scanf("%d",&(L.elem[i]));
L.length++;
}
printf("所创建的线性表为:\n");
for(i=0;i<L.listsize;i++){
printf("%4d",L.elem[i]);
}
printf("\n");
printf("\n");
printf("请输入要删除的元素的位置:") ;
scanf("%d",&i);
DeleteList(L, i ) ;
printf("删除后的线性表为:\n");
for(i=0;i<L.length;i++){
printf("%4d",L.elem[i]);
}
printf("\n");
printf("\n");
printf("请输入要插入的位置和元素:") ;
scanf("%d%d",&i,&e);
Listinsert (L,i,e);
printf("插入后的线性表为:\n");
for(i=0;i<L.length;i++){
printf("%4d",L.elem[i]);
}
printf("\n");
printf("\n");
return OK;
}