#include <stdio.h>
#include <stdbool.h> //由于使用bool类型,需要头文件包含stdbool.h
#define MAX 100 //定义最大长度
typedef int ElemType;
typedef int Status;
//动态内存分配-test
//#define InitSize 100
//typedef struct{
// ElemType* data;
// int length,Max;
//}Seqlist;
//静态分配
typedef struct{
ElemType data[MAX];
int length;
}Seqlist;
//1.初始化线性表
void InitList(Seqlist *L){
L->length=0;
}
//2.线性表 创建
void CreateList(Seqlist *L,ElemType a[],int n){
for(int i=0;i<n;i++){
L->data[i]=a[i];
L->length++;
}
printf("线性表创建完成!\n");
}
//3.返回线性表表长
int Length(Seqlist *L){
return L->length;
}
//4.按值查找,打印结果
void LocateElem(Seqlist *L,ElemType e){
int index=0; //创建索引
for(int i=0;i<L->length;i++){
if(L->data[i]==e){
index=i+1;
printf("%d元素在线性表的%d位置.\n",e,index);
}
}
if(index==0){
printf("表中无%d元素!\n",e);
}
}
//5.按位查找,找到该位元素并打印输出
void GetElem(Seqlist* L,int i){
if(i>L->length||i<1){
printf("i输入不合法!\n");
}else{
printf("%d号位上的元素是%d\n",i,L->data[i-1]);
}
}
//6.插入操作,在表上的第i个位置插入元素e
bool InsertList(Seqlist* L,int i,ElemType e) {
if(i<1||i>L->length+1){
printf("插入的第i个位置不合法!\n");
return false;
}
if(L->length>=MAX){
printf("存储空间已满!\n");
return false;
}
//包含i位置及之后元素后移,采取从后往前的方法
for(int j=L->length;j>=i;j--){
L->data[j]=L->data[j-1];
}
//第i个位置填充e
L->data[i-1]=e;
//(*L).length++ 长度加一
L->length++;
return true;
}
//7.打印线性表
void PrintList(Seqlist* L) {
for(int i=0;i<L->length;i++){
printf("%d ",L->data[i]);
}
printf("\n");
}
//8.删除第i个元素
bool DeleteElem(Seqlist* L,int i){
if(i<1||i>L->length){
printf("删除的的第i个位置不合法!\n");
return false;
}
for(int j=i;j<L->length;j++){
L->data[j-1]=L->data[j];
}
L->length--;
return true;
}
//9.
int main(){
Seqlist L,*p=&L;
//1.线性表的初始化
InitList(p);
//2.线性表创建
ElemType arr[]={4,1,8,5,5,12,-2,9};
CreateList(p,arr,8);
//3.求线性表表长
printf("线性表L的表长为:%d\n", Length(p));
//4.按值x查找,打印结果
printf("现在按值查找该表,请输入查找元素:");
int x1;
scanf("%d",&x1);
LocateElem(p,x1);
//5.按位查找,找到该位元素并输出
printf("请输入按位查找的i值:");
int x2;
scanf("%d",&x2);
GetElem(p,x2);
//6.插入操作,在表上的第x1个位置插入元素e
// 7.打印线性表
printf("输入位置i和待插入元素:");
int e;
int x3;
scanf("%d%d",&x3,&e);
if(InsertList(p,x3,e)){
printf("插入成功!打印插入后的线性表:");
PrintList(p);
}else{
printf("插入失败!");
}
//8.删除第i个元素
printf("输入待删除位置i:");
int x4;
scanf("%d",&x4);
if(DeleteElem(p,x4)){
printf("删除成功!打印删除后的线性表:");
PrintList(p);
}else{
printf("删除失败!\n");
}
return 0;
}
线性表顺序表的基本操作-C语言实现
于 2023-09-28 20:53:59 首次发布