//线性表的顺序存储结构和操作
#include
#include
#define MAX 100
typedef struct Student{
int num[MAX];
int length;
}student;
//顺序表的顺序存储结构初始化
void initList(student **L)
{
(*L)=(student *)malloc(sizeof(student));
(*L)->length=0;
}
//求表长运算
int listLength(student *L)
{
return L->length;
}
//元素定位运算
int locateElem(student *L,int x)
{
int i=0;
while(ilength){
if(L->num[i]==x)
return i++;
else
i++;
}
return -1;
}
//获取元素运算
int getElem(student *L,int w,int *e){
if(wL->length){
return -1;//返回-1,w位置的元素不存在
}
else{
*e=L->num[w-1];
return 1;//返回1,w位置的元素存在
}
}
//插入运算
int listInsert(student *L,int w,int *e)
{
int j;
if(wL->length+1){
return -1;
}
if(L->length==MAX){
return -1;
}
for(j=L->length;j>=w;j--)
L->num[j]=L->num[j-1];
L->num[w-1]=*e;
L->length++;
return 1;
}
//删除运算
int listDelete(student *L,int w,int *e)
{
int j;
if(wL->length){
return -1;
}
*e=L->num[w-1];
for(j=w;jlength;j++)
L->num[j-1]=L->num[j];
L->length--;
return 1;
}
//遍历运算
void listTraverse(student *L)
{
int i;
for(i=0;ilength;i++){
printf("%d ",L->num[i]);
}
printf("\n");
}
int main()
{
int number;
student **head,*p;
int i;
int w;
int e;
int l;
int s;
head=&p;
initList(head);
for(i=0;i
p->num[i]=i;
p->length=i+1;
}
while(1){
printf("输入0,退出程序\n");
printf("输入1,求表长\n");
printf("输入2,通过元素找位置\n");
printf("输入3,通过位置找元素\n");
printf("输入4,插入元素\n");
printf("输入5,删除元素\n");
printf("输入其它数字,遍历线性表\n");
scanf("%d",&number);
if(number==0){
exit(1);
}
switch(number){
case 1://求表长
l=listLength(p);
printf("线性表的长度为:%d\n",l);
break;
case 2://通过元素找位置
printf("请输入要找位置的元素:\n");
scanf("%d",&e);
w=locateElem(p,e);
if(w
printf("元素 %d 不在线性表中\n",e);
else
printf("元素 %d 在线性表中的%d\n",e,w);
break;
case 3://通过位置找元素
printf("请输入要找元素的位置:\n");
scanf("%d",&w);
s=getElem(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
els
e
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
break;
case 4://插入元素
listTraverse(p);
printf("请输入要插入的位置:\n");
scanf("%d",&w);
printf("请输入要插入的元素:\n");
scanf("%d",&e);
s=listInsert(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
else
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
listTraverse(p);
break;
case 5://删除元素
listTraverse(p);
printf("请输入要删除的位置:\n");
scanf("%d",&w);
s=listDelete(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
else
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
listTraverse(p);
break;
default://遍历线性表
listTraverse(p);
}
}
return 0;
}
//线性表的顺序存储结构和操作
#include
#include
#define MAX 100
typedef struct Student{
int num[MAX];
int length;
}student;
//顺序表的顺序存储结构初始化
void initList(student **L)
{
(*L)=(student *)malloc(sizeof(student));
(*L)->length=0;
}
//求表长运算
int listLength(student *L)
{
return L->length;
}
//元素定位运算
int locateElem(student *L,int x)
{
int i=0;
while(ilength){
if(L->num[i]==x)
return i++;
else
i++;
}
return -1;
}
//获取元素运算
int getElem(student *L,int w,int *e){
if(wL->length){
return -1;//返回-1,w位置的元素不存在
}
else{
*e=L->num[w-1];
return 1;//返回1,w位置的元素存在
}
}
//插入运算
int listInsert(student *L,int w,int *e)
{
int j;
if(wL->length+1){
return -1;
}
if(L->length==MAX){
return -1;
}
for(j=L->length;j>=w;j--)
L->num[j]=L->num[j-1];
L->num[w-1]=*e;
L->length++;
return 1;
}
//删除运算
int listDelete(student *L,int w,int *e)
{
int j;
if(wL->length){
return -1;
}
*e=L->num[w-1];
for(j=w;jlength;j++)
L->num[j-1]=L->num[j];
L->length--;
return 1;
}
//遍历运算
void listTraverse(student *L)
{
int i;
for(i=0;ilength;i++){
printf("%d ",L->num[i]);
}
printf("\n");
}
int main()
{
int number;
student **head,*p;
int i;
int w;
int e;
int l;
int s;
head=&p;
initList(head);
for(i=0;i
p->num[i]=i;
p->length=i+1;
}
while(1){
printf("输入0,退出程序\n");
printf("输入1,求表长\n");
printf("输入2,通过元素找位置\n");
printf("输入3,通过位置找元素\n");
printf("输入4,插入元素\n");
printf("输入5,删除元素\n");
printf("输入其它数字,遍历线性表\n");
scanf("%d",&number);
if(number==0){
exit(1);
}
switch(number){
case 1://求表长
l=listLength(p);
printf("线性表的长度为:%d\n",l);
break;
case 2://通过元素找位置
printf("请输入要找位置的元素:\n");
scanf("%d",&e);
w=locateElem(p,e);
if(w
printf("元素 %d 不在线性表中\n",e);
else
printf("元素 %d 在线性表中的%d\n",e,w);
break;
case 3://通过位置找元素
printf("请输入要找元素的位置:\n");
scanf("%d",&w);
s=getElem(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
els
e
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
break;
case 4://插入元素
listTraverse(p);
printf("请输入要插入的位置:\n");
scanf("%d",&w);
printf("请输入要插入的元素:\n");
scanf("%d",&e);
s=listInsert(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
else
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
listTraverse(p);
break;
case 5://删除元素
listTraverse(p);
printf("请输入要删除的位置:\n");
scanf("%d",&w);
s=listDelete(p,w,&e);
if(s
printf("位置为 %d 元素不在线性表中\n",w);
else
printf("位置为 %d 元素在线性表中为 %d\n",w,e);
listTraverse(p);
break;
default://遍历线性表
listTraverse(p);
}
}
return 0;
}