数据结构基础之链表

链表的数据机构定义在SeqList.h文件中,代码如下:

typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L){ //初始化列表 L->length = 0; } int ListEmpty(SeqList L) { if(L.length==0) return 1; else return 0; } int GetElem(SeqList L,int i,DataType *e) { if(i<1 i="">L.length) //当传入的指针需要双向传递时用指针比较合适,一般情况下值都是单向传递 return -1; *e=L.list[i-1]; return 1; } int LocateElem(SeqList L,DataType e) //查找元素表中元素为e值的位置 { int i; for(i=0;iL->length+1) { printf("插入位置i不合法\n"); return -1; } else if(L->length >= ListSize) { printf("顺序表已满\n"); return 0; } else { for(j=L->length;j>=i;j--)//从i后面的元素开始计数 L->list[i] = L->list[i-1]; L->list[i-1] = e; L->length = L->length+1; return 1; } } int DeleteList(SeqList *L,int i,DataType *e) { int j; if(L->length<=0){ printf("顺序表已经不能删除\n"); return 0; } else if(i<1 i="">L->length){ printf("删除位置不合适\n"); return -1; } else { *e = L->list[i-1]; for(j=i;jlength;j++){ L->list[i-1] = L->list[i]; } L->length=L->length-1; return 1; } } int LengthList(SeqList L) { //获取长度 return L.length; } void ClearList(SeqList *L) { //清空顺序表 L->length = 0; } 1>1>1>对链表应用的举列,已知两个单链表A和B,其中的元素都是非递减排列,编写算法将链表A和B合并得到一个递减有序的单链表C,代码如下: #include #include #include typedef int DataType; #include"LinkList.h" void MergeList(LinkList A,LinkList B,LinkList *C); void main() { int i; DataType a[] ={8,10,15,21,67,89}; DataType b[] = {5,9,10,13,21,78,91}; LinkList A,B,C; ListNode *p; InitList(&A); InitList(&B); for(i=1;i<=sizeof(a)/sizeof(a[0]);i++) { if(InsertList(A,i,a[i-1])==0) { printf("插入位置不合法"); return; } } for(i=1;i<=sizeof(b)/sizeof(b[0]);i++) { if(InsertList(B,i,b[i-1])==0) { printf("插入位置不合法"); return; } } printf("链表A中有元素%d个\n",ListLength(A)); for(i=0;idata); } printf("\n"); printf("链表B中有元素%d个\n",ListLength(B)); for(i=0;idata); } printf("\n"); MergeList(A,B,&C); printf("链表C中有元素%d个\n",ListLength(C)); for(i=0;idata); } printf("\n"); } void MergeList(LinkList A,LinkList B,LinkList *C) { ListNode *pa,*pb,*qa,*qb; pa=A->next; pb=B->next; free(B); *C=A; (*C)->next=NULL; while(pa&&pb) { if(pa->datadata) { qa=pa; pa=pa->next; if((*C)->next==NULL) { qa->next=(*C)->next; (*C)->next=qa; } else if((*C)->next->datadata) { qa->next=(*C)->next; //把qa指向的元素插入到C中 (*C)->next=qa; } else free(qa); } else { qb=pb; pb=pb->next; if((*C)->next==NULL) { qb->next=(*C)->next; (*C)->next=qb; } else if((*C)->next->datadata) { qb->next=(*C)->next; (*C)->next=qb; } else free(qb); } } while(pa) { qa=pa; pa=pa->next; if((*C)->next&&(*C)->next->data < qa->data) { qa->next=(*C)->next; (*C)->next=qa; } else free(qa); } while(pb) { qb=pb; pb=pb->next; if((*C)->next&&(*C)->next->data < qb->data) { qb->next=(*C)->next; (*C)->next=qb; } else free(qb); } } 参考书——《数据结构》-陈锐

你可能感兴趣的:(数据结构与算法)