练习下数据结构的知识。
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef int ElemType;
/*
线性表的实现
*/
//存储结构定义 -静态存储结构
typedef struct {
ElemType data[MaxSize];
int length;
}Sqlist;
//初始化结构
void initList(Sqlist *L){
int i = 0;
for(i = 0 ; i < MaxSize ; i++)
L->data[i] = 0;
L->length = 0;
}
//求表长
int Length(Sqlist L){
return L.length;
}
//按值查找
int LocateElem(Sqlist L,ElemType e){
int i = 0;
for(i = 0 ; i < L.length ; i++){
if( L.data[i] == e){
return i + 1;
}
}
return -1;
}
//插入操作 返回值: 0表示假,1表示真
int ListInsert(Sqlist *L,int i,ElemType e){
if(i < 1 || i > L->length + 1){
return 0;
}
if(L->length > MaxSize){
return 0;
}
int j = 0;
for(j = L->length ; j > i - 1 ; j--){
L->data[j] = L->data[j - 1];
}
L->data[i-1] =e;
L->length ++;
return 1;
}
//删除操作 返回值: 0表示假,1表示真
int ListDelete(Sqlist *L,int i,ElemType *e){
if( i < 0 || i > L->length){
return 0;
}
int j = 0;
for(j = i ; j < L->length ; j ++){
L->data[j - 1] = L->data[j];
}
L->length--;
return 1;
}
//判空操作
int Empty(Sqlist *L){
return L->length == 0;
}
//输出操作
void PrintList(Sqlist *L){
int i = 0;
for(i = 0 ; i < L->length ; i++){
printf("%d\t",L->data[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
Sqlist L;
initList(&L);
while(1){
printf("**********线性表实现**********\n");
printf("\t1.添加元素\n");
printf("\t2.删除元素\n");
printf("\t3.查找元素\n");
printf("\t4.浏览全部元素\n");
printf("\t5.元素个数\n");
printf("******************************\n");
printf("请输入指令:\n");
int command;
scanf("%d",&command);
getchar();
switch(command){
case 1:
printf("请输入要添加的元素值:");
int e;
scanf("%d",&e);
getchar();
printf("请输入要添加的位置:");
int index;
scanf("%d",&index);
getchar();
ListInsert(&L,index,e);
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d",&index);
getchar();
if(ListDelete(&L,index,&e) == 1)
printf("元素%d被删除!\n",e);
break;
case 3:
printf("请输入要查找的元素值:");
scanf("%d",&e);
getchar();
index = LocateElem(L,e);
printf("你查找的元素%d在%d位置\n",e,index);
break;
case 4:
PrintList(&L);
break;
case 5:
index = 0;
index = Length(L);
printf("线性表一共有%d个元素\n",index);
break;
}
}
return 0;
}