#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 20 /*数组最大界限*/
typedef int ElemType; /*数组元素类型*/
typedef struct{
ElemType a[MAXSIZE]; /*一维数组子域*/
int length; /*表长度子域*/
}SqList; /*顺序存储的结构体类型*/
SqList a,b,c;
/*函数声明*/
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L, int i,ElemType e);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
main()
{int i,k,loc;
ElemType e,x;
char ch;
do { printf("\n\t 实验二 线性表! ");/*显示提示的信息*/
printf("\n\t 请选择操作:");
printf("\n\t\t 1. 建立线性表");
printf("\n\t\t 2. 插入元素");
printf("\n\t\t 3. 删除元素");
printf("\n\t\t 4. 查找元素");
printf("\n\t\t 5. 显示线性表");
printf("\n\t\t 0. 结束程序运行");
printf("\n==================================");
printf("\n \t请选择操作(1,2,3,4,5,0):");
scanf("%d",&k);
switch(k) { /*用单条件多选择语句实现调用与循环*/
case 1: {
creat_list(&a);
out_list(a);
}
break;
case 2: {
printf("\n请输入插入位置(>=1,<=%d): ",a.length+1);
scanf("%d",&i);
printf("\n请输入要插入的元素值: ");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}
break;
case 3: {
printf("\n请输入要删除元素的位置(>=1,<=%d): ",a.length);
scanf("%d",&i);
x=delete_sq(&a,i);
out_list(a);
if(x!=-1)printf("\n删除的元素为: %d\n",x);
else printf("要删除的元素不存在!");
}
break;
case 4: {
printf("\n请输入要查找的元素值: ");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)printf("\n未找到指定的元素!");
else printf("\n已找到,元素位置是 %d",loc);
}
break;
case 5: out_list(a);break;
case 0: {}; break;
default:
printf("\n\t*********************************\n");
printf("\n\t 输入指令应在 0-5中!!! \n");
printf("\n\t**********************************");
break;
}/*switch*/
}while(k!=0);
printf("\n\t按回车键,返回...\n");
ch=getchar();
}/*main*/
/*建立线性表*/
void creat_list(SqList *L)
{int i;
printf("请输入线性表长度: ");
scanf("%d",&L->length);
for(i=0;i<L->length;i++)
{printf("数据%d= ",i);
scanf("%d",&(L->a[i]));
}
}
/*输出线性表*/
void out_list(SqList L)
{int i;
for (i=0;i<L.length;i++)
printf("%5d",L.a[i]);
}
/*在线性表的第i个位置插入元素e*/
void insert_sq(SqList *L, int i,ElemType e)
{int j;
L->length+=1;
for (j=L->length-1;j>=i-1;j--)
{
L->a[j+1]=L->a[j];
}
L->a[i-1]=e;
}
/*删除第i个元素,返回其值*/
ElemType delete_sq(SqList *L, int i)
{ int x;
if(i<=0||i>=L->length) return (-1);
else
{x=L->a[i-1];
for (;i<L->length;i++)
L->a[i-1]=L->a[i];
L->length-=1;
return x;
}
}
/*查找值为e的元素,返回其位置*/
int locat_sq(SqList L,ElemType e)
{int i;
for (i=0;i<L.length;i++)
if(L.a[i]==e) return i+1;
if(i>=L.length) return(-1);
}
#include "stdlib.h"
#define MAXSIZE 20 /*数组最大界限*/
typedef int ElemType; /*数组元素类型*/
typedef struct{
ElemType a[MAXSIZE]; /*一维数组子域*/
int length; /*表长度子域*/
}SqList; /*顺序存储的结构体类型*/
SqList a,b,c;
/*函数声明*/
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L, int i,ElemType e);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
main()
{int i,k,loc;
ElemType e,x;
char ch;
do { printf("\n\t 实验二 线性表! ");/*显示提示的信息*/
printf("\n\t 请选择操作:");
printf("\n\t\t 1. 建立线性表");
printf("\n\t\t 2. 插入元素");
printf("\n\t\t 3. 删除元素");
printf("\n\t\t 4. 查找元素");
printf("\n\t\t 5. 显示线性表");
printf("\n\t\t 0. 结束程序运行");
printf("\n==================================");
printf("\n \t请选择操作(1,2,3,4,5,0):");
scanf("%d",&k);
switch(k) { /*用单条件多选择语句实现调用与循环*/
case 1: {
creat_list(&a);
out_list(a);
}
break;
case 2: {
printf("\n请输入插入位置(>=1,<=%d): ",a.length+1);
scanf("%d",&i);
printf("\n请输入要插入的元素值: ");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}
break;
case 3: {
printf("\n请输入要删除元素的位置(>=1,<=%d): ",a.length);
scanf("%d",&i);
x=delete_sq(&a,i);
out_list(a);
if(x!=-1)printf("\n删除的元素为: %d\n",x);
else printf("要删除的元素不存在!");
}
break;
case 4: {
printf("\n请输入要查找的元素值: ");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)printf("\n未找到指定的元素!");
else printf("\n已找到,元素位置是 %d",loc);
}
break;
case 5: out_list(a);break;
case 0: {}; break;
default:
printf("\n\t*********************************\n");
printf("\n\t 输入指令应在 0-5中!!! \n");
printf("\n\t**********************************");
break;
}/*switch*/
}while(k!=0);
printf("\n\t按回车键,返回...\n");
ch=getchar();
}/*main*/
/*建立线性表*/
void creat_list(SqList *L)
{int i;
printf("请输入线性表长度: ");
scanf("%d",&L->length);
for(i=0;i<L->length;i++)
{printf("数据%d= ",i);
scanf("%d",&(L->a[i]));
}
}
/*输出线性表*/
void out_list(SqList L)
{int i;
for (i=0;i<L.length;i++)
printf("%5d",L.a[i]);
}
/*在线性表的第i个位置插入元素e*/
void insert_sq(SqList *L, int i,ElemType e)
{int j;
L->length+=1;
for (j=L->length-1;j>=i-1;j--)
{
L->a[j+1]=L->a[j];
}
L->a[i-1]=e;
}
/*删除第i个元素,返回其值*/
ElemType delete_sq(SqList *L, int i)
{ int x;
if(i<=0||i>=L->length) return (-1);
else
{x=L->a[i-1];
for (;i<L->length;i++)
L->a[i-1]=L->a[i];
L->length-=1;
return x;
}
}
/*查找值为e的元素,返回其位置*/
int locat_sq(SqList L,ElemType e)
{int i;
for (i=0;i<L.length;i++)
if(L.a[i]==e) return i+1;
if(i>=L.length) return(-1);
}
