线性表的创建————C语言数据结构学习

#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;
}

猜你喜欢

转载自blog.csdn.net/JCabc1/article/details/82945685
今日推荐