线性表之顺序表

// 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);
}

  

原文地址:https://www.cnblogs.com/waiwai4701/p/4122802.html