#include<stdio.h>
#include<stdlib.h>
#define max 10
//---------------------------------------------
typedef struct {
int* data;
int len;//表里现有元素
int max_s;//表里最大可以有元素
}sqlist;
//---------------------------------------------
//初始化
void initlist(sqlist *L) {
L->data = (int*)malloc(sizeof(int) * max);
L->len = 0;
L->max_s = max;
if (L->data != 0)
printf("初始化成功\n");
else
printf("初始化失败\n");
}
//逐一插入元素
void inert(sqlist *L) {
printf("请输入元素:\n");
for (int i = 0; i < max; i++) {
scanf_s("%d", &L->data[i]);
L->len++;
}
}
//按位置插入
void insertelem(sqlist* L) {
int i, e;
printf("请输入位置和数据\n");
scanf_s("%d %d", &i, &e);
if (i < 1 || i >= L->max_s)
printf("超出范围了\n");
else if (L->len == L->max_s)
printf("表已经满了\n");
else {
for (int j = L->len; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->len++;
}
}
//打印顺序表
void dayin(sqlist* L) {
if (L->len != 0) {
printf("打印表中元素:\n");
for (int i = 0; i < L->len; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
else
printf("当前为空表\n");
}
//按位置删除元素
void deleelem(sqlist* L) {
int i = 0;
printf("请输入要删除的位置:\n");
scanf_s("%d", &i);
if (i<1 || i>L->len)
printf("超出范围\n");
else if (L->len == 0)
printf("表为空表\n");
else {
for (int j = i; j <= L->len; j++) {
L->data[j - 1] = L->data[j];
}
L->len--;
printf("删除第%d个元素成功\n",i);
}
}
//清空表
void clearlist(sqlist* L) {
L->len = 0;
printf("清空成功\n");
}
//按位置去修改元素
void alterelem(sqlist* L) {
int i, m;
printf("请输入你要修改的位置和新元素\n");
scanf_s("%d %d", &i, &m);
if (i<1 || i>L->len)
printf("超出范围\n");
else if (L->len == 0)
printf("表为空\n");
else {
L->data[i - 1] = m;
printf("修改成功\n");
}
}
//按位置查询元素
void getelem(sqlist* L) {
int i;
printf("请输入你要查询的元素所在位置:\n");
scanf_s("%d", &i);
if (L->len == 0) {
printf("表为空\n");
}
if (i < 1 || i > L->len) {
printf("超出范围\n");
}
printf("线性表第%d个元素为:%d\n", i, L->data[i - 1]);
}
//菜单
void Menu() {
printf("=================================\n");
printf("1.打印线性表\n");
printf("2.删除元素\n");
printf("3.插入元素\n");
printf("4.按位置查询数据\n");
printf("5.逐个插入数据\n");
printf("6.按位置修改数据\n");
printf("7.清空线性表\n");
printf("8.初始化\n");
printf("0.退出系统\n");
printf("请输入你要进行的操作:\n");
}
int main() {
sqlist L;
void(*pa[9])(sqlist * L) = { 0,dayin ,deleelem ,insertelem ,getelem ,inert ,alterelem ,clearlist ,initlist };//函数数组指针
int i = 0;
do {
Menu();
scanf_s("%d", &i);
if (i == 0) {
printf("退出程序\n");
break;
}
pa[i](&L);
} while (1);
return 0;
}
数据结构-线性表代码详解(C语言)
最新推荐文章于 2024-06-14 10:22:04 发布