線性表的順序表示是指用一組地址連續的存儲單元依次存儲線性表的數據元素
#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;
}