#include#define MAXLEN 100 typedef struct { int array[MAXLEN]; int length; }SeqList; void InitList(SeqList *L) { //初试化顺序表的函数L L->length = 0; } void CreateList(SeqList *L,int n) { //建立顺序表并输入多个元素函数 int i; printf("请输入%d个整数:",n); for (i = 0 ; i < n; i++) { scanf_s("%d",&L->array[i]); } L->length = i; } int InsElem(SeqList* L, int i, int x) { int j; if (L->length >= MAXLEN) //检查顺序表是否已满 { printf("顺序表已满!"); return -1; } if (i<1 || i>L->length + 1) //检查插入位置的正确性,是否存在这个位置 { printf("插入位置错误!"); return 0; } if (i == L->length + 1) //插入位置为表尾,直接插入,不用移动数组 { L->array[i - 1] = x; //插入新元素 L->length++; //表长加1 return 1; } for (j = L->length - 1; j >= i - 1; j--) //插入位置不为表尾,插入点后各位置向后移 { L->array[j + 1] = L->array[j]; } L->array[i - 1] = x; //插入新元素 L->length++; //表长加1 return 1; } int DelElem(SeqList *L,int i,int *x) { int j; if (L->length == 0) //判断顺序表是否为空 { printf("顺序表为空!"); return 0; } if (i<1 || i>L->length) //检查顺序表删除的位置是否正确 { printf("不存在第i个元素!"); return 0; } *x = L->array[i - 1]; for (j = i; j < L->length; j++) //这种写法是错误的,i+1的下标超界了 L->array[j-1] = L->array[j]; L->length--; return 1; } int GetElem(SeqList* L, int i, int *x) //L顺序表存在, i表中元素的位置, x找到该元素并返回的值 { //按位置查找 if (i<1 || i>L->length) //判断查找位置是否正确 { return 0; } else { *x = L->array[i - 1]; //将表中第i个元素赋值给指针变量 return 1; } } int Locate(SeqList* L, int x) { //按值查找 int i=0; while (i < L->length && L->array[i] != x) i++; if (i >= L->length) //i大于表长返回失败 return 0; else return i + 1; // 返回元素的位置 } void DispList(SeqList* L) { //显示顺序表中的每个元素 int i; for (i = 0; i < L->length; i++) { printf("%4d",L->array[i]); } } void Menu() { printf("nn1.建立顺序表"); printf("n2.插入元素"); printf("n3.删除元素"); printf("n4.按位置查找元素"); printf("n5.按值查找元素"); printf("n6.求顺序表的长度"); printf("n7.返回"); printf("请输入菜单号(1-7):"); } int main() { SeqList L; int x; //元素的值 int i; //线性表元素的位置 int ch2,ch1='y'; int n; //线性表的个数 int loc; int a; while (ch1 == 'y') { Menu(); scanf_s("%d", &ch2); getchar(); switch (ch2) { case 1: InitList(&L); printf("请输入建立线性表的个数:"); scanf_s("%d", &n); CreateList(&L, n); printf("建立的线性表为:"); DispList(&L); break; case 2: printf("请输入要插入的位置:"); scanf_s("%d",&i); printf("请输入要的元素:"); scanf_s("%d",&x); if (InsElem(&L, i, x)) { printf("已成功在第%d的位置上插入元素%d,插入后的线性表为:n", i, x); DispList(&L); } else printf("插入的参数错误!"); break; case 3: printf("请输入要删除元素的位置:"); scanf_s("%d",&i); if (DelElem(&L, i, &x)) { printf("已成功在第%d的位置上删除%d,删除后的线性表为:n", i, x); DispList(&L); } else printf("删除的参数错误!"); break; case 4: printf("请输入要查看的表中元素的位置(从1开始):"); scanf_s("%d",&i); if (GetElem(&L, i, &x)) { printf("当前线性表的第%d个位置是:%d", i, x); } else printf("输入的位置错误!"); break; case 5: printf("请输入要查找的元素值为:"); scanf_s("%d",&x); loc = Locate(&L, x); if (loc) { printf("查找元素值为%d的位置为:%d",x,loc); } else printf("表中无此元素!"); break; case 6: printf("当前线性表的长度为:%d",L.length); break; case 7: ch1 = 'n'; break; default:printf("请在1-7之间进行输入!"); } } return 0; }
效果图:



