数据结构与算法之顺序表

顺序表

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char Elemtype;
typedef struct list
{
    char date[MaxSize];
    int length;
}Sqlist;


void Createlist(Sqlist *&L,Elemtype a[],int n)   //建立顺序表 
{
    int i;
    L=(Sqlist *)malloc(sizeof(Sqlist));
    for(i=n-1;i>=0;i--)
        L->date[i]=a[i];
    L->length=n;
}
/*******************************************
********************************************/

void Initlist(Sqlist *&L)             //初始化顺序表 
{
    L=(Sqlist *)malloc(sizeof(Sqlist));
    L->length=0;
}
/*******************************************
********************************************/

void Destroylist(Sqlist *&L)   //释放顺序表 
{
    free(L);
}
/*******************************************
********************************************/
bool ListEmpty(Sqlist *L)       //判空 
{
    if(L->length!=0)
        return true;
    else
        return false;
}
/*******************************************
********************************************/
int Listlength(Sqlist *L)   //输出长度 
{
    printf("%d\n",L->length); 
}
/*******************************************
********************************************/
void Displist(Sqlist *L)          //输出顺序表 
{
    int i;
    for(i=0;i<L->length;i++)
        printf("%c \n",L->date[i]);
}
/*******************************************
********************************************/
void GetElem(Sqlist *L,int j)  //求顺序表中的某个下标的元素值 
{
    int i;
    for(i=0;i<L->length;i++)
    {
        if(i==j-1)
            printf("%c\n",L->date[i]);
    }
}
/*******************************************
********************************************/
int LocateElem(Sqlist  * L,Elemtype e)//按元素值查找 
{
	int i=0;
	while(i<L->length && L->date[i]!=e)
	i++;
	if(i>=L->length)
	{
		return 0;
	}
	else
	{
		printf("%d\n",i+1);
	}
	
}
/*******************************************
********************************************/
bool listinsert(Sqlist *&l,int j,Elemtype e)  //插入元素 
{
    int i;
    if(j<1 || j>l->length+1 || l->length==MaxSize)
        return false;
    j--;
    for(i=l->length;i>j;i--)
        l->date[i]=l->date[i-1];
    l->date[j]=e;
    l->length++;
    return true;
}
/*******************************************
********************************************/
bool Deletelement(Sqlist *&l,int j,Elemtype &e)  //删除数据元素 
{
    int i;
    if(j<1 || j>l->length+1)
        return false;
    j--;
    e=l->date[j];
    for(i=j;i<l->length-1;i++)
        l->date[i]=l->date[i+1];
    l->length--;
    return true;
}
/*******************************************
********************************************/


int main()
{
    Sqlist *L;
    Elemtype a[5]={'a','b','c','d','e'};       
    Elemtype e=0;
    Initlist(L);                        //初始化顺序表L
    printf("初始化完成\n");
 /*******************************************
********************************************/   
    
    Createlist(L,a,5);                  //依次插入a,b,c,d,e
    printf("插入元素后输出的顺序表为:\n");
/*******************************************
********************************************/
    Displist(L);                        //输出顺序表L
/*******************************************
********************************************/
    printf("此顺序表长度为:");
    printf("%d\n",Listlength(L));      //输出顺序表L长度
/*******************************************
********************************************/ 
    if(ListEmpty(L)==1)                  //判断顺序表L是否为空
        printf("不为空\n");
    else
        printf("为空\n");
/*******************************************
********************************************/
    printf("顺序表的第3个元素为:");   //输出顺序表的第3个元素 
    GetElem(L,3);
/*******************************************
********************************************/ 
    printf("元素a的位置为:");         //查找a的位置 
    LocateElem(L,'a');
/*******************************************
********************************************/ 
    listinsert(L,4,'f');            //在第4个元素位置上插入元素f 
    printf("插入元素后的顺序表为:\n");
/*******************************************
********************************************/
    Displist(L);                        //输出顺序表L
/*******************************************
********************************************/
    Deletelement(L,3,e);              //删除L的第3个元素
/*******************************************
********************************************/   
    printf("删除元素后的顺序表为:\n");
    Displist(L);                       //输出顺序表L
/*******************************************
********************************************/ 
    Destroylist(L);                   //释放顺序表L
    printf("释放顺序表");
    return 0;
}
posted @ 2019-10-06 22:16  AmosAlbert  阅读(82)  评论(0编辑  收藏  举报