数据结构线性表的顺序存储结构c语言版
顺序表的创建,输入,输出,插入,删除,按值查找,按位查找,删除操作
C代码
#include<stdio.h>
#define Maxsize 50
typedef int ElemType;
typedef struct{
ElemType data[Maxsize];
int length;
}Sqlist; //顺序表类型定义
void listcreat(Sqlist *L);
void listinsert(Sqlist *L, int i, ElemType e);
void listdelete(Sqlist *L, int i, ElemType e);
void elemlocate(Sqlist *L, ElemType e);
void getlist(Sqlist *L, int i);
void listcreat(Sqlist *L)
{
printf("请输入顺序表的长度: ");
scanf("%d",&L->length);
if(L->length>Maxsize){
printf("超过最大长度!\n");
}
if(L->length==0){
printf("空表!\n");
}
else
for(int i=0;i<L->length;i++){
printf("请输入第%d个数据: ",(i+1));
scanf("%d",&(L->data[i]));
}
printf("创建成功! \n");
}
void listinsert(Sqlist *L, int i, ElemType e)
{
if(i<1||i>L->length+1){
printf("插入位置不合法,插入失败!\n");
}
else if(L->length>=Maxsize){
printf("存储空间已满!\n");
}
else {
for(int j=L->length;j>=i;j--){
L->data[j]=L->data[j-1];
}
L->data[i-1]=e;
printf("插入成功!\n");
L->length++;
}
}
void listdelete(Sqlist *L, int i, ElemType e)
{
if(i<1||i>L->length){
printf("输入位置不合法,删除失败!\n");
}
e=L->data[i-1];
for(int j=i;j<L->length;j++){
L->data[j-1]=L->data[j];
}
printf("删除成功!\n");
L->length--;
}
void lsitprint(Sqlist *L)
{
printf("该顺序表为: ");
for(int i=0;i<L->length;i++){
printf("%d ",L->data[i]);
}
printf("\n");
}
void elemlocate(Sqlist *L, ElemType e)
{
for(int i=0;i<L->length;i++){
if(L->data[i]==e){
printf("查找成功!\n 该元素位于顺序表第%d位\n",i+1);
}
else if(i==L->length-1&&L->data[i]!=e){
printf("没有找到该元素,查找失败!\n");
}
}
}
void getlist(Sqlist *L, int i)
{
if(i<1||i>L->length){
printf("该位置不存在!\n");
}
else
printf("%d\n",L->data[i-1]);
}
int main()
{
int i;
ElemType e;
Sqlist L;
printf("\n\n\n");
printf("\n\t\t\t\t\t\t1.创建顺序表");
printf("\n\t\t\t\t\t\t2.插入");
printf("\n\t\t\t\t\t\t3.删除");
printf("\n\t\t\t\t\t\t4.按值查找");
printf("\n\t\t\t\t\t\t5.按位查找");
printf("\n\t\t\t\t\t\t6.输出");
printf("\n\t\t\t\t\t\t7.退出\n\n");
while(1)
{
printf("\n请选择您想选择的操作: ");
int k;
scanf("%d",&k);
switch(k)
{
case 1:
listcreat(&L);
break;
case 2:
printf("请输入插入的位置:");
scanf("%d",&i);
printf("请输入插入的元素:");
scanf("%d",&e);
listinsert(&L,i,e);
break;
case 3:
printf("请输入要删除的位置:");
scanf("%d",&i);
listdelete(&L,i,e);
break;
case 4:
printf("请输入要查找的值:");
scanf("%d",&e);
elemlocate(&L,e);
break;
case 5:
printf("请输入要查找位置:");
scanf("%d",&i);
getlist(&L, i);
break;
case 6:
lsitprint(&L);
break;
case 7:
return 0;
}
}
}