// ConsoleApplication4.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <string.h> #define INIT_SIZE 100 #define INCRE_SIZE 10 using namespace std; #define ERROR 0 #define OK 1 typedef int DataType; typedef struct { DataType *elem; int length; int size; }SqList; void intitSqList(SqList *L){ L->elem = (DataType*)malloc(INIT_SIZE*sizeof(DataType)); if(!L->elem) exit(0); L->length = 0; L->size = INIT_SIZE; return; } //直接在表的最后一位插入 void insertAfterTail(SqList *L,DataType data) { DataType *newbase; if(L->length >= INIT_SIZE) { newbase = (DataType*)realloc(L->elem,(L->length + INCRE_SIZE)*sizeof(DataType)); if(!newbase) exit(0); L->elem = newbase; L->size += INCRE_SIZE; } L->length++; L->elem[L->length] = data; } int insertSqList(SqList *L,int i,DataType data)//i表示第几个元素 { DataType *newbase; cout<<"i="<<i<<"L.size="<<L->size; if(i<1 ||i>L->size) return ERROR; if(L->length >= INIT_SIZE) { newbase = (DataType*)realloc(L->elem,(L->length + INCRE_SIZE)*sizeof(DataType)); if(!newbase) return ERROR; L->elem = newbase; L->size += INCRE_SIZE; } cout<<"L.length"<<L->length; for(int j=L->length-1;j>=i;j--) { L->elem[i+1] = L->elem[i]; } L->elem[i] = data; L->length++; cout<<"return ok"; return OK; } void print(SqList *L) { if(L->length == 0) printf("%s","list is empty"); for(int i=1;i<=L->length;i++) { printf("%d,",L->elem[i]);//按指针取是从1开始的 } } void delete_Sq(SqList *L,int i) { DataType *p,*ELEM,*q;//ELEM用来存放已删除的元素,p用来存放首地址,q用来存放最后一个元素的地址 if(i<1 || i>L->size) exit(0); if(L->length == 0) exit(0); p = &(L->elem[i-1]); ELEM = p; q = L->elem+L->length-1; for(++p;p<=q;++q) { *(p-1) = *p; } --L->length; return; } int locate(SqList *L,DataType data) { int i; int flag = 0; for(i=1;i<=L->length;i++) { if(data = L->elem[i]) { cout<<"find it"<<L->elem[i]; flag = 1; break; } } return flag; } void merge(SqList *La,SqList *Lb,SqList *Lc) { int i=1,j=1; while(i<=La->length && j<=Lb->length) { if(La->elem[i] <=Lb->elem[j]) { insertAfterTail(Lc,La->elem[i]); i++; } else { insertAfterTail(Lc,Lb->elem[j]); j++; } } while(i<=La->length) { insertAfterTail(Lc,La->elem[i]); i++; } while(j<=Lb->length) { insertAfterTail(Lc,Lb->elem[j]); j++; } } void main() { /*SqList L; intitSqList(&L); //print(L); DataType data = 1; insertSqList(&L,1,data); print(&L); printf("%s","init over"); //delete_Sq(&L,1); //print(&L); //printf("delete over"); cout<<"search:"<<locate(&L,data); insertAfterTail(&L,data); print(&L);*/ SqList La,Lb,Lc; intitSqList(&La); intitSqList(&Lb); intitSqList(&Lc); insertAfterTail(&La,1); insertAfterTail(&La,4); insertAfterTail(&Lb,3); merge(&La,&Lb,&Lc); print(&Lc); }