顺序表操作集C语言详解版完整可编译
顺序表操作集C语言源代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 30
typedef int ElementType;
typedef struct SqList {
ElementType * Data;
int length;
int size;
} List;
List InitSqList();
void ShowList(List L);
List Insert(List L,ElementType elem,int pos);
List Delete(List L, int pos);
int Find(List L, ElementType elem);
List Amend(List L, ElementType elem, ElementType newElem);
void ToN();
int main() {
List L = InitSqList();
ElementType X,e,Elem,newElem;
int choice = 99,i = 0,p;
printf("*********顺序表*********\n");
printf("1.创建\n2.查找\n3.插入\n4.删除\n5.输出\n6.求表长\n7.修改\n8.10进制转N进制\n0.安全退出程序\n");
while (choice != 0) {
printf("\t请输入你的选择(数字):");
scanf("%d",&choice);
fflush(stdin);
switch (choice) {
case 0:
printf("\n安全退出程序...");
exit(0);
case 1:
printf("\n创建线性表------请输入线性表元素(以-999结束输入):");
while (1) {
scanf("%d",&e);
if (e == -999) break;
L.Data[i++] = e;
L.length++;
if (L.length > L.size) {
printf("超出MAX_SIZE");
break;
}
}
break;
case 2:
printf("\n请输入要查找的元素X:");
scanf("%d", &X);
p = Find(L, X);
if ( p == -1 ) printf("查找错误: %d 不是此线性表中元素.\n", X);
else printf("%d 在 %d 处 .\n", X, p);
break;
case 3:
printf("\n请输入要插入的元素X和要插入的位置p:");
scanf("%d %d",&X,&p);
L = Insert(L, X, p);
break;
case 4:
printf("\n请输入要删除的位置p:");
scanf("%d", &p);
L = Delete(L, p);
break;
case 5:
ShowList(L);
break;
case 6:
printf(" 表长为%d",L.length);
break;
case 7:
printf("\n请输入要修改的元素和新元素:");
scanf("%d %d",&Elem, &newElem);
L = Amend(L, Elem, newElem);
break;
case 8:
ToN();
break;
default:
printf("无效选择,请确认菜单有此选项再重新输入!");
break;
}
}
return 0;
}
List InitSqList() {
List L;
L.Data = (int*)malloc(MAX_SIZE * sizeof(int));
if (!L.Data) {
printf("初始化失败");
exit(0);
}
L.length = 0;
L.size = MAX_SIZE;
return L;
}
void ShowList(List L) {
int i;
printf("\n线性表为:");
for (i = 0; i < L.length; i++) {
printf("%d ", L.Data[i]);
}
printf("\n");
}
List Insert(List L,ElementType elem,int pos) {
int i;
if (pos > L.length+1 || pos <1) {
printf("插入位置有问题!");
return L;
}
if (L.length == L.size) {
L.Data = (int *)realloc(L.Data,(L.size + 1) * sizeof(int));
if (!L.Data) {
printf("存储分配失败!");
return L;
}
L.size += 1;
}
for (i = L.length - 1; i >= pos - 1; i--) {
L.Data[i + 1] = L.Data[i];
}
L.Data[pos - 1] = elem;
L.length++;
return L;
}
List Delete(List L, int pos) {
int i;
if (pos > L.length || pos < 1) {
printf("被删除元素的位置有误");
exit(0);
}
for (i = pos; i < L.length; i++) {
L.Data[i - 1] = L.Data[i];
}
L.length--;
return L;
}
int Find(List L, ElementType elem) {
int i;
for (i = 0; i < L.length; i++) {
if (L.Data[i] == elem) {
return i + 1;
}
}
return -1;
}
List Amend(List L, ElementType elem, ElementType newElem) {
int pos = Find(L, elem);
L.Data[pos- 1] = newElem;
return L;
}
void ToN() {
printf("请输入数据和要转换的进制:\n");
int num,n;
scanf("%d %d",&num,&n);
int a[100];
int k = 0;
while (num != 0) {
a[k++] = num%n;
num /= n;
}
int j;
printf("转换成%d进制为:",n);
for (j = k-1; j >= 0; j--) {
printf("%d",a[j]);
}
return;
}
顺序表操作集运行结果
