数据结构 第三季(part 1)

来源:互联网 发布:流星网络电视2.88注册 编辑:程序博客网 时间:2024/04/28 00:20
//线性表:零个或多个数据元素的有限序列//线性表的//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 20typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int length;}SqList;
#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef 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;elsereturn 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);*/ //endADTint 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