数据结构:顺序表

SeqList.h

#pragma once
#include
#include
#include

typedef int SLDataType;
//#define NULL 0

typedef struct SeqList {
	SLDataType* a;
	int size;//顺序表中存储的有效元素的个数
	int capacity;//空间的大小
}SL;

void SLInit(SL* ps);
void SLDestroy(SL* ps);
void SPrint(SL* ps);

void SLPopBack(SL* ps);
void SLPushBack(SL* ps,SLDataType x);
void SLCheckCapacity(SL* ps);

void SLPushFront(SL* ps, SLDataType x);
void SLPopFront(SL* ps);

void SLInsert(SL* ps, int pos, SLDataType x);
int SLFind(SL* ps, SLDataType x);
void SLErase(SL* ps, int pos);
void SLModify(SL* ps, int pos, SLDataType x);

SeqList.c

#include"SeqList.h"

void SLInit(SL* ps) {
	assert(ps);
	ps->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);
	if (ps->a == NULL) {
		perror("malloc failed");
		exit(-1);
	}
	ps->size = 0;
	ps->capacity = 4;
}

void SLDestroy(SL* ps){
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->size = 0;
	ps->capacity = 0;
}

void SPrint(SL* ps) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		printf("%d ", ps->a[i]);
	}
	printf("\n");
}

void SLPopBack(SL* ps) {
	assert(ps);
	//assert(ps->size > 0);
	//ps->size--;
	SLErase(ps, ps->size-1);
}

void SLPushBack(SL* ps, SLDataType x) {
	assert(ps);
	//SLCheckCapacity(ps);
	//ps->a[ps->size] = x;
	//ps->size++;
	SLInsert(ps, ps->size-1, x);
}

void SLCheckCapacity(SL* ps) {
	assert(ps);
	if (ps->size == ps->capacity) {
		SLDataType* tmp = (SLDataType*)realloc(ps->a, ps->capacity * 2 * sizeof(SLDataType));
		if (tmp == NULL) {
			perror("realloc failed");
			exit(-1);
		}
		ps->a = tmp;
		ps->capacity = ps->capacity * 2;
	}
}

void SLPushFront(SL* ps, SLDataType x) {
	assert(ps);
	//SLCheckCapacity(ps);
	//int end = ps->size - 1;
	//while (end >= 0) {
	//	ps->a[end + 1] = ps->a[end];
	//	--end;
	//}
	//ps->a[0] = x;
	//ps->size++;
	SLInsert(ps, 0, x);
}

void SLPopFront(SL* ps) {
	assert(ps);
	//assert(ps->size > 0);
	//int begin = 1;
	//while (begin < ps->size) {
	//	ps->a[begin - 1] = ps->a[begin];
	//	++begin;
	//}
	//ps->size--;
	SLErase(ps, 0);
}

void SLInsert(SL* ps, int pos, SLDataType x) {
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);
	SLCheckCapacity(ps);

	int end = ps->size - 1;
	while (end >= pos) {
		ps->a[end + 1] = ps->a[end];
		--end;
	}
	ps->a[pos] = x;
	ps->size++;
}

int SLFind(SL* ps, SLDataType x) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		if (ps->a[i] == x) {
			return i;
		}
	}
	return -1;
}

void SLErase(SL* ps, int pos) {
	assert(ps);
	assert(pos >= 0 && pos < ps->size);

	int begin = pos + 1;
	while (begin < ps->size) {
		ps->a[begin - 1] = ps->a[begin];
		++begin;
	}
	ps->size--;
}

void SLModify(SL* ps, int pos, SLDataType x) {
	assert(ps);
	assert(pos >= 0 && pos < ps->size);
	ps->a[pos] = x;
}

移除元素

int removeElement(int* nums, int numsSize, int val){
    int n = numsSize;
    int begin = 0;
    int end = 0;
    while(begin<n){
        if(nums[begin]!=val){
            nums[end] = nums[begin];
            end++;
            begin++;
        }else{
            begin++;
        }
    }
    return end;    
}

合并两个有序数组


void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    int end1 = m-1;
    int end2 = n-1;
    int end = n+m-1;
    
    while(end1>=0 && end2>=0){
        if(nums1[end1]>=nums2[end2]){
            nums1[end] = nums1[end1];
            end--;
            end1--;
        }else{
            nums1[end] = nums2[end2];
            end--;
            end2--;
        }
    }
    while(end2>=0){
        nums1[end--] = nums2[end2--];
    }
}

你可能感兴趣的:(#,数据结构,数据结构,c语言,算法)