动态顺序表

"seqlist.h"头文件

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define data_max 3
typedef int datatype;
typedef struct seqlist
{
	datatype *date;//数据
	datatype size;
	datatype capacity;
}seqlist;
void seqlistinit(seqlist *ps);//初始化
void seqlistdestory(seqlist *ps); //销毁
void SeqListclear(seqlist *ps);//清空
void checkcapacity(seqlist *ps);//扩容
void seqlistpushback(seqlist *ps,datatype x);//尾插
void seqlistpopback(seqlist *ps);//尾删
void seqlistsort(seqlist *ps);//排序
void seqlistpushfront(seqlist *ps,datatype x);//头插
void seqlistpopfront(seqlist *ps);//头删
// 在顺序表pos位置插入值为data的元素 
void seqlistInsert(seqlist* ps, int pos, datatype data);
//在顺序表中查找值为x的元素,找到返回该元素在顺序表中的下标,否则返回-1 
int seqlistfind(seqlist *ps,datatype x);
// 在顺序表pos位置插入值为data的元素 
void SeqListInsert(seqlist * ps, int pos, datatype data);
// 删除顺序表中pos位置上的元素
void SeqListErase(seqlist *ps, int pos);


seqlist.c 源代码

#include "seqlist.h"
void seqlistinit(seqlist *ps) {//初始化
	
	ps->capacity = data_max;
	ps->size = 0;
	datatype *tmp = NULL;
	tmp = (datatype*)malloc(data_max * sizeof(ps->date));
	ps->date = tmp;
}
void checkcapacity(seqlist *ps) {//扩容
	if (ps->size== ps->capacity) {
		datatype *tmp = (datatype*)realloc(ps->date, (ps->capacity + data_max) * sizeof(ps->date));
		if (ps->date == NULL)
		{
			perror("realloc error:");
			exit(EXIT_FAILURE);
		}
		ps->date = tmp;
		ps->capacity = ps->capacity + data_max;
    }
}
void seqlistpushfront(seqlist *ps, datatype x) {//头插
	assert(ps);
	checkcapacity(ps);
	if (ps->size == 0) {
		ps->date[0] = x;
		ps->size++;
	}
	else {
		for (int i = ps->size-1; i >= 0; i--) {
			ps->date[i + 1] = ps->date[i];
		}
		ps->date[0] = x;
		ps->size++;
	}
}
void seqlistpopfront(seqlist *ps) {//头删
	assert(ps);

	if (ps->size == 0) {
		printf("顺序表无元素\n");
	}
	else if (ps->size == 1) {
		ps->size--;
	}
	else {
		for (int i = 1; i < ps->size; i++) {
			ps->date[i - 1] = ps->date[i];
		}
		ps->size--;
	}
}
void seqlistpushback(seqlist *ps, datatype x) {//尾插
	assert(ps);
	checkcapacity(ps);
	ps->size++;
	ps->date[ps->size - 1] = x;
}
void seqlistpopback(seqlist *ps) {//尾删
	ps->size--;
}
//在顺序表中查找值为data的元素,找到返回该元素在顺序表中的下标,否则返回-1 
int seqlistfind(seqlist *ps, datatype x) {
	for (int i =0; i < ps->size; i++) {
		if (ps->date[i] == x) {
			return i;
		}
	}
	return - 1;
}
// 在顺序表pos位置插入值为data的元素 
void seqlistInsert(seqlist* ps, int pos, datatype x) {
	ps->size++;
	assert(ps);
	checkcapacity(ps);
	int i = ps->size - 1;
	for (; i>pos; i--) {
		ps->date[i] = ps->date[i - 1];
	}
	ps->date[i] = x;
}
swap(datatype*p1, datatype*p2) {
	datatype tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}
void seqlistsort(seqlist *ps) {//排序
	int flag = 0;
	for (int i = 0; i < ps->size-1; i++) {
		flag = 0;
		for (int j = 0; j < ps->size-1 - i; j++) {
			if (ps->date[j] > ps->date[j + 1]) {
				swap(ps->date + j, ps->date + j + 1);
				flag = 1;
			}
		}
		if (flag == 0)
			return;
   }
}
void SeqListclear(seqlist *ps) {//清空
	assert(ps);
	ps->size = 0;
}
void seqlistdestory(seqlist *ps) {//销毁
	assert(ps);
	free(ps);
	ps = NULL;
}

 

测试文件text.c

#include "seqlist.h"
int main() {
	seqlist arr;
	seqlist *ps=&arr;
	seqlistinit(ps);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 7);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 8);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 5);
	

	seqlistpushfront(ps, 4);
	seqlistpushfront(ps, 1);
	seqlistpushfront(ps, 1);

	seqlistpushfront(ps, 45);
	seqlistpopback(ps);
	seqlistpushfront(ps, 45);
	seqlistpopfront(ps);
	/*int n=seqlistfind(ps, 1);
	printf("%d\n", n);*/
	seqlistInsert(ps, 3, 7);
	seqlistsort(ps);
	//seqlistclear(ps);
	//seqlistdestory(ps);
	
	for (int i = 0; i < ps->size; ++i) {
		printf("%d\n", ps->date[i]);
	}
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值