ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言顺序表增删查改

2021-12-12 17:59:52  阅读:282  来源: 互联网

标签:ps int void pos C语言 查改 增删 SeqList size


list.h

#pragma once
#include<stdlib.h>
#include <stdio.h>
#include<assert.h>
#include<string.h>
#include<errno.h>
typedef int SLDataType;
#define N 10
//struct SeqList
//{
//	SLDataType a[N];
//	int size;
//
//};
typedef struct SeqList
{
	SLDataType* a;
	int size;
	int capactity;

}SL,SeqList;
void SeqListPushBack(SL* ps, SLDataType x);
void SeqListPophBack(struct SeqList* ps);
void SeqListPushFront(struct SeqList* ps, SLDataType x);
void SeqListPophFront(struct SeqList* ps);
void SeqListInsert(struct SeqList* ps,int pos,SLDataType x);
void SeqListErase(struct SeqList* ps,int pos); 
void SeqListInit(SL* ps);
void testSeqList1();
void SeqListPrint(SL* ps);
void SeqListCheckCapacity(SL* ps);
void SeqListDestroy(SL* ps);
void SeqListFind(SL* ps, SLDataType x);
void SeqListChange(struct SeqList* ps, int pos, SLDataType x);

seqlist.c

#include"list.h"
void SeqListPushBack(SL* ps, SLDataType x);
void SeqListPophBack(struct SeqList* ps);
void SeqListPushFront(struct SeqList* ps, SLDataType x);
void SeqListInsert(struct SeqList* ps, int pos, SLDataType x);
//void SeqListErase(struct SeqList* ps, int pos, SLDataType x);


int main()
{
	//SeqList s;
	testSeqList1();
	return 0;
}

void testSeqList1()
{
	SeqList s;
	SeqListInit(&s);
	SeqListPushBack(&s,1);
	SeqListPushBack(&s, 3);
	SeqListPushBack(&s, 2);
	SeqListPushBack(&s, 1);
	SeqListPushBack(&s, 3);
	SeqListPushBack(&s, 2);
	SeqListPrint(&s);
	SeqListPophBack(&s);
	SeqListPophBack(&s);
	SeqListPushFront(&s, -2);
	SeqListPrint(&s);
	SeqListPophFront(&s);
	SeqListInsert(&s,1, 6);
	SeqListPrint(&s);
	/*SeqListErase(&s, 1, 6);
	SeqListPrint(&s);*/
	SeqListInsert(&s, 2, 6);
	SeqListPrint(&s);
	SeqListErase(&s, 2);
	SeqListPrint(&s);
	SeqListFind(&s, 6);
	SeqListChange(&s, 3, 9);
	SeqListPrint(&s);



	



	SeqListPrint(&s);
	SeqListDestroy(&s);
}
void SeqListInit(SL* ps)
{
	ps->a =(SLDataType*)malloc(sizeof(SLDataType)*4) ;
	if (ps->a==NULL)
	{
		printf("失败");
		exit(-1);
	}
	ps->size = 0;
	ps->capactity=4;
}
void SeqListPushBack(SL* ps, SLDataType x)
{
	assert(ps);
	//if (ps->size>=ps->capactity)
	//{
	//	ps->capactity *= 2;
	//	assert(ps->a);
	//	ps->a = realloc(ps->a, sizeof(SLDataType) * (ps->capactity));
	//	//assert(ps->a);
	//	if (ps->a==NULL)
	//	{
	//		printf("扩容失败");
	//		exit(-1);

	//	}
	//}
	SeqListCheckCapacity(ps);
	ps->a[ps->size] = x;
	ps->size++;
	//SeqListInsert(ps, ps->size, x);
}
void SeqListPophBack(struct SeqList* ps)
{
	assert(ps);
	ps->a[ps->size - 1] = 0;
	ps->size--;
}
void SeqListPrint(SL* ps)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		printf("%d", ps->a[i]);
	}
	printf("\n");

}
void SeqListPushFront(struct SeqList* ps, SLDataType x)
{
	assert(ps);
	SeqListCheckCapacity(ps);
	int end = ps->size - 1;
	while (end>=0)
	{
		ps->a[end + 1] = ps->a[end];
		end--;
	}
	ps->a[0] = x;
	ps->size++;
}
void SeqListCheckCapacity(SL* ps)
{
	if (ps->size >= ps->capactity)
	{
		ps->capactity *= 2;
		assert(ps->a);
		ps->a = realloc(ps->a, sizeof(SLDataType) * (ps->capactity));
		//assert(ps->a);
		if (ps->a == NULL)
		{
			printf("扩容失败");
			exit(-1);

		}
	}

}
void SeqListPophFront(struct SeqList* ps)
{
	assert(ps);
	int start = 0;
	while (start<ps->size-1)
	{
		ps->a[start] = ps->a[start + 1];
		start++;
	}
	ps->size--;
}
void SeqListInsert(struct SeqList* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos < ps->size&&pos>0);
	SeqListCheckCapacity(ps);
	//int postion = ps->a[pos];
	int end = ps->size - 1;

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

	
}
void SeqListErase(struct SeqList* ps, int pos)
{
	assert(ps);
	assert(pos <= ps->size&& pos> 0);
	int end = ps->size - 1;
	int start = pos;
	//ps->a[pos] = 0;
	while (start<end)
	{
		ps->a[pos]=ps->a[pos+1];
		start++;
	}
	ps->size--;
}
void SeqListFind(SL* ps, SLDataType x)
{
	assert(ps);
	int i = 0;
	for ( i = 0; i < ps->size; i++)
	{
		if (ps->a[i]==x)
		{
			return printf("%d\n",i);
		}
	}
	return -1;
}
void SeqListChange(struct SeqList* ps, int pos, SLDataType x)
{
	assert(ps);
	assert(pos <= ps->size && pos > 0);
	ps->a[pos] = x;
}
void SeqListDestroy(SL* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capactity = ps->size = 0;
}
//时间复杂度o(N)
//浪费空间
//缓存命中率高 把一段数据加载到缓存
//随机访问

标签:ps,int,void,pos,C语言,查改,增删,SeqList,size
来源: https://blog.csdn.net/m0_55733945/article/details/121890951

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有