.用顺序表实现数据元素是整数的线性表,使其具有如下功能:(1)初始化一个空表 (2)根据指定个数,逐个输入整数; (3)根据给定的整数值进行查找,查找成功,返回此整数的在表中的位置,查找不成功,则输出查找失败; (4)根据指定的位置可返回相应的整数; (5)给定一个整数,插入到表中指定的位置; (6)删除指定位置的整数; (7)统计表中整数个数即求表长。 (8)逐个显示整数表中所有的整数; 下面展示一些 内联代码片 。
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int ElemType;
#include<iostream>
#include <iomanip>
using namespace std;
#include<stdio.h>
#include <stdlib.h>
typedef struct
{
ElemType *elem;
int length;
}SqList;
Status InitList(SqList &L)
{
L.elem=new ElemType [MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
printf("初始化空表成功!\n");
return OK;
}
Status CreatList(SqList &L)
{
int n;
int i;
printf("输入要创建的整数个数\n");
scanf("%d",&n);
printf("依次输入整数的值\n");
for(i=0;i<n;i++)
{
printf("请输入第%d个整数:",i+1);
scanf("%d",&L.elem[i]);
}
L.length=n;
return OK;
}
int LocateELem(SqList L,ElemType e)
{
int i;
for (i=0;i<L.length;i++)
if (e==L.elem[i]) return i+1;
return 0;
}
Status ListInsert(SqList &L,int i ,ElemType e)
{
int j;
if(i<1 || i>L.length+1)
{
printf("i值不合法\n");
return ERROR;
}
if(L.length==MAXSIZE)
{
printf("存储空间已满!\n");
return ERROR;
}
for(j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
Status ListDelete(SqList &L,int i)
{
int j;
if((i<1)||(i>L.length)) return ERROR;
for (j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
return OK;
}
int GetLength(SqList L)
{
return (L.length);
}
void Print_Sq(SqList L)
{
int i;
printf("该顺序表中各整数为\n");
for(i=0;i<L.length;i++)
printf("%5d",L.elem[i]);
}
void ClearList(SqList &L)
{
L.length=0;
}
void main()
{
SqList L;
int choice,j=1;
int init=0,creat=0;
ElemType e;
int i;
while(j)
{
printf("\n");
printf("\n\t\t 线性表子系统 ");
printf("\n\t\t************************************************");
printf("\n\t\t* 1------初始化一个空表 *");
printf("\n\t\t* 2------创建顺序表,输入各整数值 *");
printf("\n\t\t* 3------插 入 *");
printf("\n\t\t* 4------删 除 *");
printf("\n\t\t* 5------查 找 *");
printf("\n\t\t* 6------求 表 长 *");
printf("\n\t\t* 7------显 示 *");
printf("\n\t\t* 8------清 空 *");
printf("\n\t\t* 0------返 回 *");
printf("\n\t\t************************************************");
printf("\n\t\t 请选择菜单号(0--8): ");
scanf("%d",&choice);
switch(choice)
{
case 1:
init=InitList(L);
break;
case 2:
if(init==OK) { creat=CreatList(L); break;}
else
{
printf("请先进行初始化");
break;
}
case 3:
if(creat==OK)
{
printf("\n请输入插入的位置i和插入的数据:");
printf("\n输入格式:插入位置,整数(中间用逗号分隔)\n");
scanf("%d,%d",&i,&e);
if(ListInsert(L,i,e)) printf("插入成功!\n");
break;
}
else
{
printf("请先创建顺序表");
break;
}
case 4:
if(creat==OK)
{
printf("\n\t\t 请输入要删除的元素位置:");
scanf("%d",&i);
ListDelete(L,i);
break;
}
else
{
printf("请先创建顺序表");
break;
}
case 5:
if(creat==OK)
{
printf("\n\t\t 请输入要查找的整数:");
scanf("%d",&e);
if(LocateELem(L,e)) printf("该数据是第%d个元素\n",LocateELem(L,e));
else printf("查找失败,表中无此数据\n");
break;
}
else
{
printf("请先创建顺序表");
break;
}
case 6:
printf("该整数表的表长为:%d\n",GetLength(L));
break;
case 7:
if(L.length==0)
printf("\n\t\t 空表,请先输入各整数值! ");
else
Print_Sq(L);
break;
case 8:
if(L.length==0)
{ printf("\n\t\t 空表,无需清空操作! "); break;}
else
{ ClearList(L);
break;
}
case 0:
j=0;
break;
default:
printf("\n\t\t 输入错误! 请重新输入! ");
}
}
}
这个只是参考哈,和题目不完全一样,可以参照我的单链表改,在我博客里面哈!
|