#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
void InitList(SqList *&L);//初始化线性表InitList(L)
void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
int ListLength(SqList *L);//求线性表的长度ListLength(L)
void DispList(SqList *L);//输出线性表DispList(L)
bool GetElem(SqList *L,int i);//求某个数据元素值GetElem(L,i,e)
int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
bool ListDelete(SqList *&L,int i);//删除数据元素ListDelete(L,i,e)
//用数组创建线性表
void CreateList(SqList *&L, ElemType a[], int n) //引用型指针
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for (i==0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
//初始化线性表InitList(L)
void InitList(SqList *&L) //引用型指针
{
L=(SqList *)malloc(sizeof(SqList));
//分配存放线性表的空间
L->length=0;
}
//销毁线性表DestroyList(L)
void DestroyList(SqList *&L)
{
free(L);
}
//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
//求线性表的长度ListLength(L)
int ListLength(SqList *L)
{
return(L->length);
}
//输出线性表DispList(L)
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;
for (i=0;i<L->length;i++)
printf("%d",L->data[i]);
printf("\n");
}
//求某个数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i)
{ int e;
if (i<1 || i>L->length) return false;
e=L->data[i-1];
return true;
}
//按元素值查找LocateElem(L,e)
int LocateElem(SqList *L, ElemType e)
{
int i=0;
while (i<L->length && L->data[i]!=e) i++;
if (i>=L->length) return 0;
else return i+1;
}
//插入数据元素ListInsert(L,i,e)
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (i<1 || i>L->length+1)
return false; //参数错误时返回false
i--; //将顺序表逻辑序号转化为物理序号
for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e; //插入元素e
L->length++; //顺序表长度增1
return true; //成功插入返回true
}
//删除数据元素ListDelete(L,i,e)
bool ListDelete(SqList *&L,int i)
{
int j,e;
if (i<1 || i>L->length) //参数错误时返回false
return false;
i--; //将顺序表逻辑序号转化为物理序号
e=L->data[i];
for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return true; //成功删除返回true
}
int main()
{
SqList *sq;
ElemType a[6]= {5,8,7,2,4,9};
int i,x,choice;
printf("第一步.创建线性表......\n");
CreateList(sq, a, 6);
while(1){
printf("创建成功!请选择菜单执行相关操作\n");
printf(" 1.销毁线性表\n");
printf(" 2.判定线性表是否为空\n");
printf(" 3.求线性表的长度\n");
printf(" 4.输出线性表\n");
printf(" 5.求线性表第i个位置上的元素\n");
printf(" 6.查找线性表中元素e的位置\n");
printf(" 7.在线性表第i个位置插入元素\n");
printf(" 8.删除线性表第i个位置上的元素\n");
printf(" 0.退出\n");
printf(" 请输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 0: return 0;
case 1: DestroyList(sq);
printf("线性表销毁成功~~程序直接退出!!");
return 0;
case 2: if(ListEmpty(sq))
printf("线性表为空!");
else
printf("线性表不为空!");
break;
case 3: printf("该线性表长度为%d\n",ListLength(sq));
break;
case 4: printf("输出线性表:\n");
DispList(sq);
break;
case 5: printf("请输入待查找元素的位置:");scanf("%d",&i);
printf("第%d个位置上的元素为%d",i,GetElem(sq,i));
break;
case 6: printf("请输入要查找的元素:");scanf("%d",&x);
printf("%d元素在线性表的第%d个位置\n",x,LocateElem(sq,x));
break;
case 7: printf("请输入要插入位置和值(空格隔开):");scanf("%d%d",&i,&x);
ListInsert(sq,i,x);
break;
case 8: printf("请输入要删除的位置");scanf("%d",&i);
ListDelete(sq,i);
break;
}
printf("按任意键继续……");
getchar();getchar();
}
return 0;
}
线性表的创建————C语言数据结构学习
猜你喜欢
转载自blog.csdn.net/JCabc1/article/details/82945685
今日推荐
周排行