【数据结构】顺序表——2021/12/23
一天一个基础的数据结构类型,本来这个应该在半个月前就应该发出来的……希望每天发发博客,能帮我自律一点🙈.
不多说,上代码:
#include "stdio.h"
#define ListSize 100
typedef int DataType;
typedef struct
{
DataType data[ListSize];
int length;
} SeqList;
SeqList L;
void InitList(SeqList *L)
{
L->length = 0;
}
void CreateList(SeqList *L, int n)
{
printf("请输入%d个整数:\n", n);
int i;
for (i = 0; i < n; i++)
{
scanf("%d", &L->data[i]);
}
L->length = i;
}
void DispList(SeqList *L)
{
for (int i = 0; i < L->length; i++)
{
printf("\t%d", L->data[i]);
}
printf("\n");
}
int FindKey(int k, SeqList *L, DataType *x)
{
int i = k - 1;
if (0 <= i && i <= (L->length - 1))
{
*x = L->data[i];
return 1;
}
else
{
printf("位置超出了表范围!!");
return 0;
}
}
int InsertKey(int k, SeqList *L, DataType x)
{
int i = k - 1;
if (i < -1 || i > L->length)
{
printf("插入位置越界!\n");
printf("插入错误!!\n");
return 0;
}
if (i == L->length)
{
L->data[i] = x;
L->length++;
printf("插入表尾成功!!\n");
printf("此时表长为:%d\n", L->length);
return 1;
}
if (i==-1)
{
i++;
}
for (int n = L->length - 1; n >= i; n--)
{
L->data[n + 1] = L->data[n];
}
L->data[i] = x;
L->length++;
printf("插入顺序表成功!!\n");
return 1;
}
int DeleteKey(int k,SeqList *L){
if (k < 1 || k > L->length)
{
printf("删除位置越界!!\n");
return 0;
}
int x = L->data[k-1];
for (int i = k - 1; i < (L->length-1); i++)
{
L->data[i] = L->data[i + 1];
}
L->length--;
printf("删除成功!\n");
printf("删除的值为:\t%d\n", x);
return 1;
}
void LocateKey(DataType x,SeqList *L){
int flag = 0;
for (int i = 0; i < L->length; i++)
{
if (L->data[i]==x)
{
printf("第一次出现相同值的位置为:%d;值为:%d\n", i+1, L->data[i]);
flag = 1;
break;
}
}
if (flag==0)
{
printf("查无此值!!\n");
}
}
void menu(){
printf("\t顺序表的各种操作:\n");
printf("==============================\n");
printf("\t1----建立顺序表\n");
printf("\t2----插入元素\n");
printf("\t3----删除元素\n");
printf("\t4----按位置查找元素\n");
printf("\t5----按元素值查找在表中的位置\n");
printf("\t6----求顺序表的长度并输出表中元素\n");
printf("\t0----退出\n");
printf("==============================\n");
}
int main()
{
SeqList L;
DataType x;
int n;
int k;
int num;
while (num != 0)
{
menu();
printf("请输入菜单号:\n");
scanf("%d", &num);
if (num==0)
{
break;
}
switch (num)
{
case 1:
printf("这是一个顺序表!");
InitList(&L);
printf("请输入顺序表的元素个数:\n");
scanf("%d", &n);
CreateList(&L, n);
printf("建立的顺序表为:\n");
DispList(&L);
break;
case 2:
printf("请输入您想插入的元素的位置:\t");
scanf("%d", &k);
printf("请输入您想插入的值:\n");
scanf("%d", &x);
if (InsertKey(k, &L, x))
{
DispList(&L);
}
break;
case 3:
printf("请输入您想删除的元素的位置:\t");
scanf("%d", &k);
if (DeleteKey(k,&L))
{
DispList(&L);
}
break;
case 4:
printf("请输入您想查询的位置:\t");
scanf("%d", &k);
if (FindKey(k, &L, &x))
{
printf("当前线性表第%d个元素的值为:%d\n", k, x);
}
else
{
printf("输入的位置错误!\n");
}
break;
case 5:
printf("请输入您想查询的值:\t");
scanf("%d", &k);
LocateKey(k, &L);
break;
case 6:
printf("表长为:\t%d\n", L.length);
DispList(&L);
break;
default:
printf("菜单号错误!\n请输入0-6的值!!\n");
break;
}
}
}
本文写于2021/12/23,留个纪念😋。
|