(第二章)线性表

#include<stdio.h>
#include<stdlib.h>
#define MAX 20  //顺序表的大小

typedef struct 
{
	int elem[MAX];
	int length;  //表长
	int last;    //表最后一位数据的下表
}SeqList;

//创建顺序表
SeqList Create_List()
{
	SeqList L;
	L.length = 0;
	int i=0;
	int a[5] = {1,2,3,4,5};
	for(i=0; i<5; i++)
	{
		L.elem[i] = a[i];
		L.length++;
	}
	L.last = L.length - 1;
	return L;
}


//在第i个位置插入e
SeqList Insert(SeqList * L, int i, int e)
{
	int k;
	if (i<1 || i> (L->length)-2)
		printf("插入位置有误,无法插入。\n");
	else if (L->length == MAX)
		printf("表满,无法插入元素。\n");
	else
	{
		for (k = L->last; k >= i-1; k--)
		{
			L->elem[k+1] = L->elem[k];
		}
		L->elem[i-1] = e;
		L->length++;
		L->last++;
	}
	
}

//删除第n个位置的元素
void Dellist(SeqList * L, int n)
{
	int i = 0;
	for (i; i<=L->length-n+1; i++ )
	{
		L->elem[n - 1] = L->elem[n++];
	}
	L->length--;
	L->last = L->length - 1;
}

//打印
void Printf(SeqList L)
{
	SeqList Q = L;
	int i;
	printf("打印表:");
	for (i = 0; i < Q.length; i++)
	{
		printf("%d ", Q.elem[i]);
	}
	printf("\n");
}

//1.按序号查找
int GetData(SeqList L, int i)
{
	return L.elem[i - 1];
}
//2.按内容查找
int Locate(SeqList L, int x)
{
	int i;
	for (i = 0; i < L.length; i++)
	{
		if (x == L.elem[i])
			return i;
	}
	return -1;
}

//合并表L和L1
SeqList * mergeList(SeqList* L, SeqList * L1, SeqList * L2)
{
	L2 = L;
	int i, j=0;
	i = L->length;
	for (j; j < L1->length; j++)
	{
		L2->elem[i+j] = L1->elem[j];
	}
	L2->length = L->length + L->length;
	L2->last = L2->length - 1;
	return L2;
}
int main()
{
	SeqList L, L1, L2;
	printf("(1)创建顺序表\n");//
	L=Create_List();
	L1 = Create_List();
	Printf(L);
	printf("(2)在第2个位置插入10:\n");
	Insert(&L, 2, 10);
	Printf(L);
	printf("(3)L中第三个元素是:%d\n", GetData(L, 3));
	printf("(4)L中是否存在【10】元素,若存在它的数组下表为(不存在,则返回-1):%d\n", Locate(L, 10));
	printf("(5)删除第5个元素:\n");
	Dellist(&L, 5);
	Printf(L);
	printf("(6)合并表L和L1:\n");
	L2=*mergeList(&L, &L1, &L2);
	Printf(L2);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值