数据结构 第三季(part 1)

//线性表:零个或多个数据元素的有限序列
//线性表的
//ADT:
/*Data
	线性表的数据对象集合为{a1,a2,....,an},每个元素的类型均为DataType,其中,除第一个元素之外,都有且只有一个前驱元素,
	除最后一个元素之外,有且只有一个直接后继元素。
  Operation
  InitList(*L);
  ListEmpty(L);
  ClearList(*L);
  GetElem(L,i,*e);
  LocateElem(L,e);
  ListInsert(*L,i,e);
  ListDelete(*L,i,*e);
  ListLength(L);
*/
 //endADT




//求La与Lb的并
void union(List *La,List Lb){
	int La_len,Lb_len,i;
	ElemType e;
	La_len = ListLength(La);
	Lb_len = ListLength(Lb);
	for(i=1;i<Lb_len;i++){
		GetElem(Lb,i,e);
		if(!LocateElem(La,e)){
			ListInsert(La,++La_len,e);
		}
	}
}
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
	ElemType data[MAXSIZE];
	int length;
}SqList;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
#include <stdio.h>

Status GetElem(SqList L,int i,ElemType *e){//查询操作
	if(L.length==0|| i<1 ||i>L.length)
		return ERROR;
	*e = L.data[i-1];
	return OK;
}

Status ListInsert(SqList *L,int i,ElemType e){//插入操作
	int k;
	if(L->length == MAXSIZE)
		return ERROR;
	if(i<1||i>L->length+1 )
		return ERROR;
	if(i<=L->length){
		for(k=L->length;k>=i-1;k--)
			L->data[k+1] = L->data[k];
	}
	L->data[i-1] = e;
	L->length++;
	return OK;
}


Status ListDelete(SqList *L,int i,ElemType *e){//删除元素
	int k;
	if(L->length==0)
		return ERROR;
	if(i<0||i>L->length)
		return ERROR;
	*e = L->data[i-1];
	for(k=i-1;i<L->length-1;i++)
		L->data[k]=L->data[k+1];
	return OK;
}

int ListLength(SqList L){//链表长度
	return L.length;
}

int LocateElem(SqList L,ElemType e){//元素定位
	int k;
	for(k=0;k<L.length;k++){
		if(e==L.data[k])
			return k+1;
	}
	return 0;
}

void ClearList(SqList *L){//清除列表
	 int k;
	 for(k=0;k<L->length;k++)
		 L->data[k]=0;
	 L->length = 0;
}

Status ListEmpty(SqList L){//判断是否为空列表
	if(L.length == 0)
		return TRUE;
	else
		return FALSE;
}

Status InitList(SqList *L){
	int i;
	printf("请输入线性列表长度:\n");
	scanf("%d",&i);
	if(i<0||i>MAXSIZE)
		return ERROR;
	L->length = i;
	for(int k=0;k<L->length;k++){
		printf("还需输入(%d)个元素......\n",(L->length-k));
		scanf("%d",&L->data[k]);
	}
	return OK;
}

#include "3_2.h"
#include "3_2b.h"
//线性表:零个或多个数据元素的有限序列
//线性表的
//ADT:
/*Data
	线性表的数据对象集合为{a1,a2,....,an},每个元素的类型均为DataType,其中,除第一个元素之外,都有且只有一个前驱元素,
	除最后一个元素之外,有且只有一个直接后继元素。
  Operation
  InitList(*L);
  ListEmpty(L);
  ClearList(*L);
  GetElem(L,i,*e);
  LocateElem(L,e);
  ListInsert(*L,i,e);
  ListDelete(*L,i,*e);
  ListLength(L);
*/
 //endADT
int main(){
	SqList L;
	InitList(&L);
	printf("线性链表是否为空?是(1)否(0):%d\n",ListEmpty(L));
	printf("线性表的长度:%d\n",ListLength(L));
	printf("现在清空线性表......\n");	
	ClearList(&L);
	printf("线性链表是否为空?是(1)否(0):%d\n",ListEmpty(L));
	printf("线性表的长度:%d\n",ListLength(L));
	ListInsert(&L,1,1);
	printf("线性链表是否为空?是(1)否(0):%d\n",ListEmpty(L));
	printf("线性表的长度:%d\n",ListLength(L));
	return 0;
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值