问题描述
实现顺序表的建立、求长度,取元素、修改元素、插入、删除等基本操作。
基本要求
(1)依次从键盘读入数据,建立顺序表;
(2)输出顺序表中的数据元素;
(3)求顺序表的长度;
(4)根据指定条件能够取元素和修改元素;
(5)实现在指定位置插入和删除元素的功能。
源代码(加注释)
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
#define ERROR -1
typedef enum {false, true} bool;
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
//声明一个结构体来存放顺序表
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );
int main()
{
List L;
ElementType X;
Position P;
int N;
L = MakeEmpty();
for(int i=0;i<20;i++)
{
if ( Insert(L, i, i)==false )
printf(" 插入错误: %d 未插入成功\n", X);
}
//实现插入功能
printf("插入前线性表的元素:");
print(L);
printf("要插入的元素:");
scanf("%d",&X);
printf("要插入的位置:");
scanf("%d",&P);
if ( Insert(L, X,P )==false )
printf(" 插入错误: %d 未插入成功\n", X);
printf("插入后的线性表中的元素:");
print(L);
//实现删除功能
printf("删除前线性表中的元素:");
print(L);
printf("要删除元素的位置:");
scanf("%d",&P);
printf("删除后线性表中的元素:");
print(L);
//实现查找的功能
printf("查找前线性表的元素:");
print(L);
printf("要查找的元素:");
scanf("%d",&X);
if(Find(L,X)!=ERROR)
{
printf("要查找的元素在线性表中的位置:");
printf("%d\n",Find(L,X));
}else
{
printf("未找到");
}
printf("查找之后线性表的元素:");
print(L);
//实现取元素的功能
printf("取元素前线性表的元素:");
print(L);
printf("要取元素:");
scanf("%d",&X);
if(Find(L,X)!=ERROR)
{
printf("要取元素在线性表中的位置:");
printf("%d\n",Find(L,X));
}else
{
printf("未找到");
}
printf("取元素之后线性表的元素:");
print(L);
//实现取元素的功能
printf("取元素前线性表的元素:");
print(L);
printf("要取元素的位置:");
scanf("%d",&P);
if(Get(L,P)!=ERROR)
{
printf("要取的元素:");
printf("%d\n",Get(L,P));
}
printf("取元素之后线性表的元素:");
print(L);
}
//输出线性表的元素
void print(List L)
{
int i=0;
while(i<=L->Last)
{
printf("%d ",L->Data[i]);
i++;
}
printf("\n");
}
//创建并返回一个空的线性表
List MakeEmpty()
{
List l = (List)malloc(sizeof(struct LNode));
//空的线性表的长度设为-1
l->Last=-1;
return l;
}
//返回线性表中位置P的值
ElementType Get(List L,Position P)
{
//参数P指向非法位置
if(P<0||P>L->Last+1)
{
printf("ILLEGAL POSITION");
return false;
}
return L->Data[P];
}
//返回线性表中X的位置
Position Find(List L,ElementType X)
{
Position i=0;
//遍历线性表,找到Data为X的位置
while(i<=L->Last&&L->Data[i]!=X)
i++;
//线性表中不存在元素X
if(i>L->Last)
return ERROR;
else
return i;
}
//将X插入在位置P
bool Insert(List L,ElementType X,Position P)
{
Position j;
//空间已满,返回false
if(L->Last==MAXSIZE-1)
{
printf("满了,");
return false;
}
//参数P指向非法位置
if(P<0||P>L->Last+1)
{
printf("ILLEGAL POSITION");
return false;
}
//向后移动元素
for(j=L->Last;j>=P;j--)
{
L->Data[j+1]=L->Data[j];
}
//插入成功返回true
L->Data[P]=X;
//修改线性表的长度
L->Last++;
return true;
}
//将位置P的元素删除
bool Delete(List L,Position P)
{
Position i;
//参数P指向非法位置
if(P<0||P>L->Last)
{
printf("POSITION %d EMPTY",P);
return false;
}
//将元素向前移动
for(i=P;i<L->Last;i++)
L->Data[i]=L->Data[i+1];
//修改线性表的长度
L->Last--;
return true;
}
运行结果及截图
1)实现删除功能
2)实现取元素功能
3)实现查找功能
4)实现插入功能
5)实现从键盘读入并求线性表长度功能
动动手指,点个赞吧~