线性表顺序存储完整代码
//1.顺序存储
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 20
#define ERROR -1
typedef int Position;
typedef int ElementType;
typedef struct LNode* PtrToLNode;
struct LNode
{
ElementType Data[MAXSIZE];
Position Last;
};
typedef PtrToLNode List;
List L;
**//1.初始化**
List MakeEmpty()
{
L = (List)malloc(sizeof(struct LNode));
L->Last = -1;
return L;
}
//2.创建顺序表
void CreateList()
{
int i = 0, data = 0;
printf("输入一组正整数,以-1结束:\n");
scanf_s("%d", &data);
while (data != -1 && L->Last < MAXSIZE)
{
L->Data[i] = data;
L->Last++;
i++;
scanf_s("%d", &data);
}
printf("创建成功!\n");
if (L->Last == MAXSIZE)
printf("表满!");
}
//3.查找
Position Find(ElementType X)
{
Position i = 0;
while (i <= L->Last && L->Data[i] != X)
i++;
if (i > L->Last)
return ERROR;//查找失败
else
return i;//查找成功返回X的位置,即i
}
//4.插入
bool Insert( ElementType X, int i)//在第i(i下标为i-1)个元素前插入新的元素 X
{
Position j;
if (L->Last == MAXSIZE - 1)
printf("表满");
if (i<1 || i>L->Last + 2)
{
printf("插入位序不合法");
return false;
}
for (j = L->Last; j >= i + 1; j--)
{
L->Data[j + 1] = L->Data[j];//将位序i及以后元素往后移动
}
L->Data[i - 1] = X;
L->Last++;
return true;
}
//5.删除
bool Delete(int i)//从L中删除指定位序i的元素,i下标为i-1
{
Position j;
if (i<1 || i>L->Last + 1)
{
printf("输入该位序不合法");
return false;
}
for (j = i; j <= L->Last; j++)
L->Data[j - 1] = L->Data[j];
L->Last--;
return true;
}
//主函数
int main()
{
int choice;
while (1)
{
printf("########################\n");
printf("1.初始化线线性表\n");
printf("2.创建线性表\n");
printf("3.查找\n");
printf("4.插入\n");
printf("5.删除\n");
printf("0.退出\n");
printf("########################\n");
printf("你的选择是:\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
{
printf("1.初始化线线性表...\n");
MakeEmpty();
if (L->Last == 1)
{
printf("初始化成功!\n");
printf("线性表的长度:%d\n", L->Last);
}
break;
}
case 2:
{
printf("2.创建线性表...\n");
CreateList();
break;
}
case 3:
{
printf("3.查找...\n");
int x_1;//数值
printf("输入数值:\n");
scanf_s("%d\n", &x_1);
Find(x_1);
if (Find(x_1) == -1)
printf("查找失败\n");
else
printf("查找成功!位置是%d\n", Find(x_1)+1);
break;
}
case 4:
{
printf("4.插入...\n");
int x_2, position_1;
printf("输入数值:\n");
scanf_s("%d\n", &x_2);
printf("输入位置:\n");
scanf_s("%d\n", &position_1);
Insert(x_2, position_1);
if (Insert(x_2, position_1) == true)
printf("成功!\n");
if (Insert( x_2, position_1) == false)
printf("失败!\n");
break;
}
case 5:
{
printf("5.删除...\n");
int position_2;
printf("输入位置:\n");
scanf_s("%d\n", &position_2);
Delete(position_2);
if (Delete(position_2) == true)
printf("成功!\n");
if (Delete(position_2) == false)
printf("失败!\n");
break;
}
case 0:
{
return 0;
break;
}
default:
printf("选择有错,请重新选择\n");
break;
}
scanf_s("%c", &choice);
}
return 0;
}
#########C语言小白还有很多不足,欢迎大家批评指正######