엄 울 민 2.1 선형 표 코드 실현

      ,     ,  !
#include
#include
#include
#include
#include
#include

#define TRUE 1      // 
#define FALSE 0     // 
#define OK 1  	    //  
#define ERROR 0	    //  
#define Warnning 0  //  
#define FAILED 0    //  
#define OVERFLOW -2 //    
/*   7        ,           */

#define LIST_INIT_SIZE 10  	//    

typedef int Order;			//    
typedef int Status;  		//    
typedef int ElemType;		//    
/*        int  ,          */

typedef struct
{
	ElemType *Elem;
	int Length;
	int ListSize;
}pList;

Status InitList(pList *L)	
{	//      
	//     :           L
	L->Elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
	if(!L->Elem)
	{
		printf("        ,        !
"); exit(OVERFLOW);// } L->Length=0; // 0 L->ListSize=LIST_INIT_SIZE; // printf(" !
"); return OK; } void DestroyList(pList *L) { // : L 。 : L if(L->Elem) { free(L->Elem); L->Elem=NULL; L->Length=NULL; L->ListSize=NULL; printf(" !
"); } } void ClearList(pList *L) { // : L 。 : L L->Length=0; printf(" !
"); } Status ListEmpty(pList *L) { // : L 。 : L , TRUE, FALSE if(L->Length) return TRUE; else return FALSE; } Status ListLength(pList *L) { // : L 。 : L return L->Length; } ElemType GetElem(pList *L,int i,ElemType *e) { // : L ,1≤i≤ListLength(L)。 : e L i int Len=ListLength(L); if(i < 1 || i > Len) { printf(" %d, !
",Len); return Warnning; } *e=L->Elem[i-1]; return *e; } int LocateElem(pList *L,ElemType e,Status(*compare)(ElemType,ElemType)) { // : L ,compare() ( 1, 0) // : L 1 e compare() 。 // , 0。 2.6 ElemType *p; int i=1; // i 1 p=L->Elem; // p 1 while(i <= L->Length && !compare(*p++,e)) ++i; if(i<=L->Length) return i; else return 0; } ElemType PriorElem(pList *L,ElemType cur_e,ElemType *pre_e) { // : L // : cur_e L , , pre_e , // ,pre_e int i=2; ElemType *p=L->Elem+1; while(i < L->Length && *p != cur_e) { p++; i++; } if(i > L->Length) { printf(" :%d!
",cur_e); return FAILED; exit(0); } else { *pre_e = *--p; return *pre_e; } } ElemType NextElem(pList *L,ElemType cur_e,ElemType *next_e) { // : L // : cur_e L , , next_e , // ,next_e int i=1; ElemType *p=L->Elem; while(i < L->Length && *p != cur_e) { p++; i++; } if(i == L->Length) { printf(" :%d!
",cur_e); return FAILED; exit(0); } else { *next_e = *++p; return *next_e; } } Status InsertList(pList *L,int i,ElemType e) { // : L ,1≤i≤ListLength(L)+1 // : L i e,L 1 if(i < 1 || i > L->Length+1) { printf(" !
"); return ERROR; } if(L->Length == L->ListSize) // , { ElemType *newbase = (ElemType *)realloc(L->Elem,sizeof(ElemType)*(L->ListSize + LIST_INIT_SIZE)); if(!newbase) { printf(" , !
"); return ERROR; } L->Elem=newbase; L->ListSize += LIST_INIT_SIZE; } ElemType *q = &(L->Elem[i-1]); //q ElemType *p; for(p = &(L->Elem[L->Length - 1]);p >= q; p--) *(p+1) = *p; *q = e; L->Length++; return OK; } Status DeleteList(pList *L,int i,ElemType *e) { // : L ,1≤i≤ListLength(L) // : L i , e ,L 1 if(i < 1 || i > L->Length) { printf(" !
"); return ERROR; } ElemType *p = &(L->Elem[i-1]); *e = *p; ElemType *q=L->Elem + L->Length-1; for(p = p + 1;p <= q;p++) *(p-1) = *p; L->Length--; return OK; } void TraverseList(pList *L) { // : L // : int i; if(L->Length == 0) { printf(" !
"); } else { printf( " :"); for(i = 1; i <= L->Length ; i++) printf("%d ", L->Elem[i-1]); printf("
"); } } void SortList(pList *L) { // if(L->Length == 0) { printf(" , !
"); exit(0); } Order order; printf(" ,0 ,1 :"); scanf("%d",&order); int i,j,tmp,max,min; switch (order) { case 0: // for(i = 0;i < L->Length-1;i++) { min = i; for(j = i;j < L->Length;j++) { if(L->Elem[min] > L->Elem[j]) min = j; } tmp = L->Elem[i]; L->Elem[i] = L->Elem[min]; L->Elem[min] = tmp; } break; case 1: // for(i = 0;i < L->Length-1;i++) { max = i; for(j = i;j < L->Length;j++) { if(L->Elem[max] < L->Elem[j]) max = j; } tmp = L->Elem[i]; L->Elem[i] = L->Elem[max]; L->Elem[max] = tmp; } break; default: break; } } void InvertList(pList *L) { // int i,j,k=L->Length,tmp; for(i=0,j=k-1;iElem[i]; L->Elem[i]=L->Elem[j]; L->Elem[j]=tmp; } } void Init() { // printf("
"); printf(" :1
"); printf(" :2
"); printf(" :3
"); printf(" :4
"); printf(" :5
"); printf(" i :6
"); printf(" :7
"); printf(" :8
"); printf(" :9
"); printf(" i :10
"); printf(" i :11
"); printf(" :12
"); printf(" :13
"); printf(" :14
"); printf(" :0
"); } int main(void) { pList L; ElemType e; //e , int i; //i srand((unsigned int)time(NULL)); // , Init(); int j=1; //j while(j!=0) { scanf("%d",&j); switch (j) { case 0: exit(0); break; case 1: if(InitList(&L)) { printf("
"); for(i=1;i<=8;++i) { e=rand()%100+1; InsertList(&L,i,e); } TraverseList(&L); } break; case 2: DestroyList(&L); TraverseList(&L); break; case 3: ClearList(&L); TraverseList(&L); break; case 4: if(ListEmpty(&L) == 0) printf(" !
"); else { printf(" !
"); TraverseList(&L); } break; case 5: i=ListLength(&L); printf(" %d
",i); break; case 6: printf(" :"); scanf("%d",&i); e=GetElem(&L,i,&e); printf(" %d :%d
",i,e); break; case 7: printf(" ,compare , !
"); break; case 8: printf(" :"); scanf("%d",&i); e=PriorElem(&L,i,&e); printf(" %d :%d
",i,e); break; case 9: printf(" :"); scanf("%d",&i); e=NextElem(&L,i,&e); printf(" %d :%d
",i,e); break; case 10: printf(" :"); scanf("%d %d",&i,&e); InsertList(&L,i,e); TraverseList(&L); break; case 11: printf(" :"); scanf("%d",&i); DeleteList(&L,i,&e); printf(" :%d
",e); break; case 12: TraverseList(&L); break; case 13: SortList(&L); TraverseList(&L); break; case 14: InvertList(&L); TraverseList(&L); break; default: break; } } return 0; }

좋은 웹페이지 즐겨찾기