線性表的順序表示和實現

線性表的順序表示是指用一組地址連續的存儲單元依次存儲線性表的數據元素

#include "stdio.h"
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10
#define OK 1
#define ERROR 0

typedef struct {
    int *elem;
    int length;
    int listsize;
}SqList;
void printArray(SqList list);
int InitList_Sq(SqList &L){
    L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
    if(!L.elem) exit(0);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
}
///ListInsert函數必須列表中元素大於等於1
int ListInsert_Sq(SqList &L,int i,int e){
if(i<1||i>L.length) return ERROR;
if(L.length>=L.listsize){
    int *newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
    if(!newbase) exit(0);
    L.elem=newbase;
    L.listsize+=LISTINCREMENT;
}
    int *q=&(L.elem[i-1]);
    for(int *p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;
    *q=e;
    ++L.length;
    return OK;
}
int ListDelet_Sq(SqList &list,int i,int &e){
    if(i<1||i>list.length) return ERROR;
    int *p;
    p=&(list.elem[i-1]);///要刪除元素的地址
    e=*p;///賦值給e
    int *q;
    q=list.elem+list.length-1;///表尾元素地址
    while(1){
        *p=*(p+1);
         p++;
        if((p+1)>q) break;
    }
    list.length--;
        return OK;
    }
void MergeList_Sq(SqList list1,SqList list2,SqList &list3){
///動過引用參數共享printf("fuck1");
    int *p1=list1.elem;int *p2=list2.elem;
    list3.listsize=list3.length=list1.length+list2.length;
   int* p3=list3.elem=(int*)malloc(sizeof(int)*list3.listsize);
    if(!list3.elem) exit(0);
    int *p1_last=list1.elem+list1.length-1;
    int *p2_last=list2.elem+list2.length-1;
    while((p1<=p1_last)&&(p2<=p2_last)){
        if(*p1>=*p2){
            *p3=*p2;
            p3++;p2++;
        }
        else{
            *p3=*p1;
            p3++;
            p1++;
        }
    }
        ///下面兩者只會出現其中一個
        while(p1<=p1_last){
            *p3=*p1;
            p3++;
            p1++;
        }
        while(p2<=p2_last){
            *p3=*p2;
            p3++;
            p2++;
        }

}
void printArray(SqList list){
    for(int i=0;i<list.length;i++){
        printf("%d  ",list.elem[i]);
    }
    printf("\n");
}
int main(){
    SqList list;
    InitList_Sq(list);
    list.elem[0]=1;
    list.elem[1]=2;
    list.elem[2]=3;
    list.elem[3]=4;
    list.length=4;
    ListInsert_Sq(list,1,5);
    for(int i=0;i<list.length;i++)
    printf("%d        ",list.elem[i]);
     printf("\n");
    int e;
    ListDelet_Sq(list,1,e);
    for(int i=0;i<list.length;i++)
    printf("%d        ",list.elem[i]);
    printf("\n");
    printf("%d",e);
    SqList lista;
    InitList_Sq(lista);
    for(int i=0;i<5;i++){
        lista.elem[i]=i;
        lista.length++;
    }
    SqList listb;
    InitList_Sq(listb);
    for(int i=0,a=5;i<5;i++,a++){
        listb.elem[i]=a;
        listb.length++;
    }
    SqList listc;
    MergeList_Sq(lista,listb,listc);
    printArray(lista);
    printArray(listb);
    printf("%d",listc.length);
    printArray(listc);

    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章