【问题描述】
设计一个顺序表操作演示程序。
【基本要求】
顺序表操作演示程序提供一个用户界面,可演示的基本功能包括:
(1)初始化顺序表;
(2)输入并建立顺序表;
(3)输出顺序表中的元素;
(4)在顺序表指定位置插入元素;
(5)在顺序表指定元素之前插入元素;
(6)删除顺序表指定位置的元素;
(7)删除顺序表指定元素之前的元素;
(8)删除顺序表所有指定值的元素。
代码实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int size;
int length;
}SqList;
Status Init(SqList &L)//初始化顺序表
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//分配空间
if(!L.elem)
{
printf("Init false!\n");//分配失败
return ERROR;
}
L.length=0;
L.size=LIST_INIT_SIZE;
printf("Init successful!\n");//分配成功
return OK;
}
Status Insert(SqList &L,int i,ElemType e)//在i位置插入数据
{
if(i<1||i>L.length+1)//位置不合理
{
printf("The location you wanna insert is wrong!\n");
return ERROR;
}
ElemType *newbase;
if(L.length>=L.size)//顺序表长度不够
{
newbase=(ElemType *)realloc(L.elem,(L.size+LISTINCREMENT)*sizeof(ElemType));//重新申请
if(!newbase)//重新申请失败
{
printf("ERROR!\n");
return ERROR;
}
L.elem=newbase;
L.size+=LISTINCREMENT;
}
ElemType *p,*q;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)//数据的移动便于在给定位置的插入
{
*(p+1)=*p;
}
*q=e;//在给定位置放入数据
L.length++;//表的长度加1
return OK;
}
Status TInsert(SqList &L,ElemType x,ElemType e,int flag)//在某元素前后插入数据
{
ElemType *newbase;
if(L.length>=L.size)//顺序表长度不够
{
newbase=(ElemType *)realloc(L.elem,(L.size+LISTINCREMENT)*sizeof(ElemType))