数据结构顺序表

设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:建立一个线性表,首先依次输人数据元素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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-07
#include<stdio.h>
#include<malloc.h>
//头文件包含命令
#define
List_init_size
100
//符号常量的定义
#define
Listincrement
100
#define
TRUE
1
#define
FALSE
0
#define
OK
1
#define
ERROR
0
#define
INFEASIBLE
-1
#define
OVERFLOW
-2
typedef
int
Elemtype;//抽象数据类型elemtype具体化为int类型
typedef
int
Status;
typedef
struct
{
//定义结构体
Elemtype
*elem;
int
length;
int
listsize;
}Sqlist;
Status
Initlist_sq(Sqlist
*l)
//函数(初始化顺序表)初始化失败则返回-2
{
l->elem
=(Elemtype*)malloc(sizeof(Elemtype));
if(!l->elem
)
return(OVERFLOW);
l->length
=0;
l->listsize
=List_init_size;
return
OK;
}
Status
Creatlist_sq(Sqlist
*l,int
n)
//初始化顺序表为含有n个元素的顺序表
{
int
i;
printf("Input
%d
numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&(l->elem
[i]));
l->length
=n;
return
OK;
}
void
Outputlist_sq(Sqlist
*l)
//函数(输出顺序表的元素)
{
int
i;
for(i=0;i<l->length
;i++)
{
printf("%5d",l->elem
[i]);
if((i+1)%5==0)
printf("\n");
}
printf("\n");
}
void
Destroylist_sq(Sqlist*l)
//销毁顺序表l
{
free(l->elem
);
}
Status
Insertlist_sq(Sqlist*l,int
i,Elemtype
e)
//在顺序表的第i个位置前插入元素e
{
int
j;
Elemtype
*p;
if(i>l->length
)
{
printf("输入数据不合法!");
return
(OVERFLOW);
}
if(l->length>=l->listsize
)
{
Elemtype
*p;
p=(Elemtype*)realloc(l->elem
,(List_init_size+Listincrement)*sizeof(Elemtype));
if(p==0)
{
return(OVERFLOW);
}
l->elem
=p;
l->listsize
=+Listincrement;
}
p=&(l->elem[i-1]);
for(j=l->length
+1;j>=i;j--)
l->elem
[j]=l->elem
[j-1];
*p=e;
l->length
++;
return
OK;
}
Elemtype
Deletelist_sq(Sqlist*l,int
i)//函数(删除)用e返回删除的元素
{
int
j;
Elemtype
e;
e=l->elem
[i-1];
for(j=i-1;j<l->length-1
;j++)
l->elem
[j]=l->elem
[j+1];
l->elem
[l->length
-1]=0;
l->length
--;
return
e;
}
相似回答