main函数中调用:
#include <stdio.h> #include "Sqlist.h" int main() { int i,elem,s[]={13,5,27,9,32,123,76,98,54,87}; int a[]={1,3,4,5,9,100,101},b[]={2,2,5,8,12,50,102}; PSqList list,lista,listb,listc; InitList(&list); DispList(list); for(i=0;i<10;i++) ListInsert(list,ListLength(list)+1,s[i]); DispList(list); printf("\nlength:%d\n",ListLength(list)); for(i=1;i<=3;i++) { GetElem(list,i,&elem); printf("%d ",elem); } printf("\n76 at %d\n",LocateElem(list,76)); ListInsert(list,4,56); printf("length:%d\n",ListLength(list)); ListDelete(list,7,&elem); SortList(list); DispList(list); DestroyList(list); InitList(&lista); InitList(&listb); for(i=0; i<7; i++) { ListInsert(lista,ListLength(lista)+1,a[i]); ListInsert(listb,ListLength(listb)+1,b[i]); } printf("\n"); DispList(lista); printf("\n"); DispList(listb); printf("\n"); listc=UnionList(lista,listb); DispList(listc); printf("\n"); return 0; }
Sqlist.h的内容:
#ifndef __SQLIST_H_ #define __SQLIST_H_ 1 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define LIST_INIT_SIZE 100 #define LIST_INCREMENT 10 typedef int ElemType; typedef struct T{ ElemType *elem; int length; int listsize; }SqList,*PSqList; void InitList(PSqList* list); void DestroyList(PSqList list); int ListLength(PSqList list); void PriorElem(PSqList list,ElemType cur_e,ElemType* pre_e); void NextElem(PSqList list,ElemType cur_e,ElemType* next_e); void DispList(PSqList list); int GetElem(PSqList list,int i,ElemType* e); int LocateElem(PSqList list,ElemType e); void ListInsert(PSqList list,int i,ElemType e); void ListDelete(PSqList list,int i,ElemType* e); void ClearList(PSqList list); void print(ElemType e); PSqList UnionList(PSqList lista,PSqList listb); void SortList(PSqList list); #endif
Sqlist.c的内容:
void InitList(PSqList* list){ (*list)=(PSqList)malloc(sizeof(SqList)); (*list)->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(*list==NULL) printf("error"); (*list)->length = 0; (*list)->listsize = LIST_INIT_SIZE*sizeof(ElemType); memset((*list)->elem,0,sizeof((*list)->elem)); } void DestroyList(PSqList list){ free(list->elem); free(list); } int ListLength(PSqList list){ return list->length; } void PriorElem(PSqList list,ElemType cur_e,ElemType* pre_e){ int i=LocateElem(list,cur_e); if(i==0||i==1) return; *pre_e = *(list->elem-2); } void NextElem(PSqList list,ElemType cur_e,ElemType* next_e){ int i=LocateElem(list,cur_e); if(i==0||i==list->length) return; *next_e = *(list->elem); } void DispList(PSqList list){ int i; if(list->length==0) return; for(i=0; i<list->length-1; i++){ print(*(list->elem+i)); printf("->"); } print(*(list->elem+i)); } int GetElem(PSqList list,int i,ElemType* e){ return *e = *(list->elem+i-1); } int LocateElem(PSqList list,ElemType e){ int i=0; while(i<list->length&&*(list->elem+i)!=e) i++; if(*(list->elem+i)==e) return i+1; else return 0; } void ListInsert(PSqList list,int i,ElemType e){ int j,end=list->length; if(i*sizeof(ElemType)>list->listsize) return; if(end*sizeof(ElemType)>list->listsize){ end --; list->length--; } for(j=end; j&&j+1>i; j--){ *(list->elem+j)=*(list->elem+j-1); } *(list->elem+i-1) = e; list->length++; } void ListDelete(PSqList list,int i,ElemType* e){ int j; for(j=i-1; j<list->length-1; j++){ *(list->elem+j)=*(list->elem+j+1); } list->length--; } void ClearList(PSqList list){ list->length = 0; } void print(ElemType e){ switch(sizeof(e)) { case 1: printf("%c",e); break; case 4: printf("%d",e); break; case 8: printf("%lf",e); break; default: printf("Can't print."); } } PSqList UnionList(PSqList lista,PSqList listb){ int i=1,j=1,elems; PSqList listc; InitList(&listc); while(i<=ListLength(lista)||j<=ListLength(listb)) { if(i>ListLength(lista)||GetElem(lista,i,&elems)>GetElem(listb,j,&elems)){ ListInsert(listc,ListLength(listc)+1,GetElem(listb,j++,&elems)); } else if(j>ListLength(listb)||GetElem(lista,i,&elems)<=GetElem(listb,j,&elems)){ ListInsert(listc,ListLength(listc)+1,GetElem(lista,i++,&elems)); } } return listc; } void SortList(PSqList list){ int i,j; for(i=0; i<ListLength(list); i++) for(j=0; j<ListLength(list)-1;j++) if(*(list->elem+j)>*(list->elem+j+1)){ *(list->elem+j)^=*(list->elem+j+1); *(list->elem+j+1)^=*(list->elem+j); *(list->elem+j)^=*(list->elem+j+1); } }