线性表的顺序存储结构

#include<stdio.h>
#include<stdlib.h>

#define length 100
#define addlength 10

typedef struct
{
	int *eum;
	int legth;
	int size;
}List;

void Initlist(List &L,int n)
{
	//初始化链表
	int i;
	L.eum = (int *)malloc(length * sizeof(int));//动态开辟内存
	if(!L.eum)
		exit(0);//判断是否开辟成功
	L.size=length;
	for(i=0;i<n;i++)
		scanf("%d",&L.eum[i]);//输入链表中的数据 
	L.legth=n;
	printf("the List has created succeed!\n");
}

void display(List L)
{
	//输出链表
	int j;
	for(j=0;j<L.legth;j++)
		printf("%d ",L.eum[j]);
	putchar('\n');
}

void  Delate(List & L,int i,int &e//将实参引用进来然后记录)
{
	//删除链表中的某一个数据
	e=L.eum[i-1];//记录
	for(int j=i-1;j<L.legth;j++)
		L.eum[j]=L.eum[j+1];//所有该位置后面的元素前移
	L.legth--;//长度减一 

}

void insertlist(List & L,int i,int e)
{
	//插入元素
	int j;
	if(i<=0||i>L.legth+1)
	{
		printf("the location is wrong!");
		exit(0);
	}//判断是否插入位置正确
	if(L.legth+1>L.size)
	{
		realloc(L.eum,L.legth+addlength);
		L.size=L.legth+addlength;
	}//插入如果超出链表范围 ,动态增加内存
	for(j=L.legth;j>=i;j--)
	{
		L.eum[j] = L.eum[j-1];//所有元素后移 ,空出插入位置。

	}
		L.eum[i-1]=e;//插入
		L.legth++;//长度增加
		printf("it has already inserted\n");

}

void sortlist(List & L)
{
	//排序
 int i,j,temp;
    for(i=0;i<L.legth-1;i++)
    {
        for(j=i+1;j<L.legth;j++)
        {
            if(L.eum[i]<L.eum[j])
            {
                temp=L.eum[i];
                L.eum[i]=L.eum[j];
                L.eum[j]=temp;
            }
        }
    }
}

void findlist1(List L,int i)
{
	//查找某一位置上的元素
	printf("the i_th is%d\n",L.eum[i-1]);
}

int findlist2(List L,int e)
{
	//查找某一元素的位置
	for(int j=0;j<L.legth;j++)
		if(L.eum[j]==e)
		{
			printf("the %d is %d_th number\n",e,j+1);
			return 1;
		}
		else 
			printf("can`t find the eum!\n");

			return 0;
}

void distorylist(List &L)
{
	//销毁链表
	free(L.eum);
    L.legth=0;
    L.size=0;//范围置零
}

int main()
{
	List L;
	int n,i,e;
	int x;
	
	while(1)
    {
        printf("            1、建立一个线性表\n");
        printf("            2、插入数据\n");
        printf("            3、删除数据\n");
        printf("            4、对数据排序\n");
        printf("            5、查找数据的位置\n");
        printf("            6、查找该位置的数据\n");
		printf("            7、显示数据\n");
        printf("            8、销毁线性表\n");
        printf("            9、退出\n");
	printf("please in put the number of list\n");
	scanf("%d",&x);
	switch(x)
	{
		 case 1:
				printf("please input the number of data");
				scanf("%d",&n);
                Initlist(L,n);
                break;
            case 2:
                printf("输入插入的数据和位置:");
                scanf("%d %d",&e,&i);
                insertlist(L,i,e);
                break;
            case 3:
                printf("输入删除数据的位置:");
                scanf("%d",&i);
                Delate(L,i,e);
                printf("删除的数据为%d\n",e);
                break;
            case 4:
                sortlist(L);
                break;
			case 5:
				printf("输入要查找第几个数据");
				scanf("%d",&i);
				findlist1(L,i);
            case 6:
                printf("输入要查找的数据:");
                scanf("%d",&e);
                findlist2(L,e);
                if(i==0)
                    printf("未查找到。\n");
                break;
            case 7:
                display(L);
                break;
            case 8:

                printf("销毁数据\n");
				distorylist(L);
                break;
            case 9:
                return 0;
	}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值