使用VS2019实现定长顺序表

#define MAXSIZE 100

typedef int ElemType;

typedef struct Student {

int id;
ElemType* data;//存储申请空间的首地址
int   length;//当前已存储的数据元素的个数

}Flixedsqlist;

//初始化定长顺序表
void Flixedsqlist_Init(Flixedsqlistsq);
//在顺序表的pos位置插入数据val
void Flixedsqlist_Insert(Flixedsqlist
sq,int pos,ElemType val);
//插入多个数据
void Flixedsqlist_Inserts(Flixedsqlistsq,int pos,ElemTypep, int n);
//得到顺序表中pos位置的数据元素
void Flixedsqlist_GetElem(Flixedsqlist* sq, int pos);
//打印顺序表
void Flixedsqlist_Show(Flixedsqlistsq);
//头插
void Flixedsqlist_InsertHead(Flixedsqlist
sq, ElemType val);
//尾插
void Flixedsqlist_InsertTail(Flixedsqlist* sq, ElemType val);
//按位置删除
void Flixedsqlist_DeletePos(Flixedsqlist* sq,int pos);
//头删
void Flixedsqlist_DeleteHead(Flixedsqlist* sq);
//尾删
void Flixedsqlist_DeleteTail(Flixedsqlist* sq);
//按值删除
void Flixedsqlist_DeleteValue1(Flixedsqlist* sq, ElemType val);
//删除多个相同值的数据
void Flixedsqlist_DeleteValue2(Flixedsqlist* sq, ElemType val);
//按值返回重复数据的最一个后位置
int Flixedsqlist_FindValueLastpos(Flixedsqlist*sq,ElemType val);

代码实现
#include"fixedsqlist.h"
#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>

void Flixedsqlist_Init(Flixedsqlist* sq)
{
if (sq == NULL)
{
exit(0);
}
sq->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
if (sq->data == NULL)
{
exit(0);
}
sq->length = 0;

}
//打印顺序表
void Flixedsqlist_Show(Flixedsqlist*sq)
{
if (sq == NULL) exit(0);
for (int i = 0; i < sq->length; i++)
{
printf("%d:%d “, i, sq->data[i]);
}
printf(”\n");

}
void Flixedsqlist_Insert(Flixedsqlist* sq, int pos, ElemType val)
{

if (sq == NULL)exit(0);

//对pos值进行合法性判断
if (pos<0 || pos>sq->length)
{
	printf("插入位置不合法\n");
}
//将val的值存储在以pos为下标的位置
if (pos < sq->length)
{
	for (int k =sq->length-1;  k>=pos; k--)
	{
		sq->data[k + 1] = sq->data[k];
	}
}
sq->data[pos] = val;
sq->length++;
if (sq->length == MAXSIZE)
{
	exit(0);
}

}
void Flixedsqlist_Inserts(Flixedsqlist* sq, int pos, ElemType* p, int n)
{
if (sq == NULL)exit(0);
if (p == NULL)
{
return;
}

if (pos<0 || pos>sq->length)
{
	printf("插入位置不合法\n");
}
if (pos < sq->length)
{
	for (int k = sq->length - 1; k >= pos; k--)
	{
		sq->data[k + n] = sq->data[k];
	}
}
for (int i = 0; i < n; i++) {
	
	sq->data[pos + i] = p[i];
}

sq->length+=n;
if (sq->length == MAXSIZE)
{
	exit(0);
}

}
void Flixedsqlist_InsertHead(Flixedsqlist* sq, ElemType val)
{
Flixedsqlist_Insert(sq, 0, val);
}
void Flixedsqlist_InsertTail(Flixedsqlist* sq, ElemType val)
{
if (sq == NULL) exit(0);
Flixedsqlist_Insert(sq, sq->length,val);
}
void Flixedsqlist_GetElem(Flixedsqlist* sq, int pos)
{
if (sq == NULL)exit(0);

//对pos值进行合法性判断
if (pos<0 || pos>sq->length)
{
	printf("位置不合法\n");
	return;
}
//输出以pos为下标的位置的值

printf("%d\n", sq->data[pos]);

}
void Flixedsqlist_DeletePos(Flixedsqlist* sq, int pos)
{
if (sq == NULL) exit(0);
if (pos < 0 || pos >= sq->length)
{
printf(“位置不合法\n”);
}
for (int i = pos; i < sq->length - 1; i++)
{
sq->data[i] = sq->data[i + 1];
}
sq->length–;
}
void Flixedsqlist_DeleteHead(Flixedsqlist* sq)
{
Flixedsqlist_DeletePos(sq, 0);

}
void Flixedsqlist_DeleteTail(Flixedsqlist* sq)
{
if (sq == NULL)exit(0);
//顺序表为空
if (sq->length == 0)return;
sq->length–;
}
//时间复杂度尾O(n^2)
void Flixedsqlist_DeleteValue1(Flixedsqlist* sq, ElemType val)
{
if (sq == NULL)exit(0);
for (int i = 0; i < sq->length;)
{
if (val == sq->data[i])
{
Flixedsqlist_DeletePos(sq, i);
}
else
{
i++;
}

}
sq->length--;

}
//时间复杂度为O(n)
// 10 20 30 20 40 50
void Flixedsqlist_DeleteValue2(Flixedsqlist* sq, ElemType val)
{
if (sq == NULL)exit(0);

int count = 0;
for (int i = 0; i +count< sq->length; )
{
	if (val == sq->data[i])
	{
		count++;
	}
	else
	{
		i++;
	}
	sq->data[i] = sq->data[i + count];
}
sq->length -= count;

}
int Flixedsqlist_FindValueLastpos(Flixedsqlist* sq, ElemType val)
{
if (sq == NULL)exit(0);

int index = -1;
for (int i = 0; i < sq->length; i++)
{
	if (val == sq->data[i])
	{
		index=i;
	}

}
return index;

}

输出结果
int main()
{
Flixedsqlist sql;
ElemType arr[] = { 10,20,50,40,30 };
Flixedsqlist_Init(&sql);

Flixedsqlist_Insert(&sql,0,1 );
Flixedsqlist_Insert(&sql, 0, 2);
Flixedsqlist_Insert(&sql, 0, 3);
Flixedsqlist_Insert(&sql, 0, 4);
Flixedsqlist_Insert(&sql, 0, 5);
Flixedsqlist_Insert(&sql, 0, 6);
Flixedsqlist_Insert(&sql, 0, 3);
Flixedsqlist_Show(&sql);
Flixedsqlist_GetElem(&sql, 5);
Flixedsqlist_InsertHead(&sql, 100);
//Flixedsqlist_InsertTail(&sql, 100);
Flixedsqlist_Show(&sql);
Flixedsqlist_InsertTail(&sql, 100);
Flixedsqlist_Show(&sql);
Flixedsqlist_DeletePos(&sql, 0);
Flixedsqlist_Show(&sql);
Flixedsqlist_DeleteHead(&sql);
Flixedsqlist_DeleteTail(&sql);
printf("%d\n",Flixedsqlist_FindValueLastpos(&sql,3));
Flixedsqlist_Inserts(&sql, 2, arr, sizeof(arr) / sizeof(arr[0]));
Flixedsqlist_Show(&sql);

return 0;

}在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值