【无标题】数据结构-线性表-作业

 1.代码

#include<iostream>
using namespace std;
#define LIST_MAX_LENGTH 10
typedef struct SequentialList {
	int actualLengh;//计算实际长度,便于维护
	int data[LIST_MAX_LENGTH];
} *SequentialListPtr;
//输出线性表
void outputList(SequentialListPtr paraList)
{
	for (int i = 0; i < paraList->actualLengh; i++)
	{
		printf("%d", paraList->data[i]);
	}
	printf("\r\n");
}
//输出表中圆熟地址
void outputMemory(SequentialListPtr paraList)
{
	printf("The address of the structure: %ld\r\n",paraList );
	printf("The address of actualLength: %ld\r\n", &paraList->actualLengh);
	printf("The address of data: %ld\r\n", &paraList->data);
	printf("The address of actual data: %ld\r\n", &paraList->data[0]);
	printf("The address of second data: %ld\r\n", &paraList->data[1]);
}
//将数组元素复制到线性表中,并返回地址
SequentialListPtr sequentialListInit(int paraData[], int paraLength)
{
	SequentialListPtr resultPtr = (SequentialListPtr)malloc(sizeof(struct SequentialList));
	for (int i = 0; i < paraLength; i++) {
		resultPtr->data[i] = paraData[i];
	}
	resultPtr->actualLengh = paraLength;
	return resultPtr;
}
//在线性表插入一个元素
void sequentialListInsert(SequentialListPtr paraListPtr, int ParaPosition, int paraValue) {
	//判断插入位置是否在表中
	if (paraListPtr->actualLengh >= LIST_MAX_LENGTH) {
		printf("Cannot insert element: list full.\r\n");
		return;//判断
	}
	if (ParaPosition < 0) {
		printf("Cannot insert element: negative position unsupported.");
		return;
	}
	if (ParaPosition > paraListPtr->actualLengh) {
		printf("Cannot insert element:the position %d is bigger than the list length %d.\r\n", ParaPosition, paraListPtr->actualLengh);
		return;
	}
	for (int i = paraListPtr->actualLengh; i > ParaPosition; i--) {
		paraListPtr->data[i] = paraListPtr->data[i - 1];//插入操作,元素依次往后移动
	}
	paraListPtr->data[ParaPosition] = paraValue;
	paraListPtr->actualLengh++;//表长长度++
}
void sequentailInsertTest() {
	int i;
	int tempArray[5] = { 3,5,2,7,4 };
	printf("--- sequentialInsertTest begins. ----\r\n");
	SequentialListPtr tempList = sequentialListInit(tempArray, 5);
	printf("After initialization,the List is:");
	outputList(tempList);

	printf("Now insert to the first , the list is:");
	sequentialListInsert(tempList, 0, 8);
	outputList(tempList);

	printf("Now insert to the last, the list is: ");
	sequentialListInsert(tempList, 6, 9);
	outputList(tempList);

	printf("Now insert beyond the tail. \r\n");
	sequentialListInsert(tempList, 8, 9);
	printf("The list is:");
	outputList(tempList);

	for (i = 0; i < 5; i++) {
		printf("Inserting %d.\r\n", (i + 10));
		sequentialListInsert(tempList, 0, (i + 10));
		outputList(tempList);
	}
	printf("---- sequentialInsertTest ends. ----\r\n");
}

int sequentailListDelete(SequentialListPtr paraListPtr,int paraPosition) {
	//判断位置是否在表中
	if (paraPosition < 0)
	{
		printf("Invalid poistion:%d.\r\n", paraPosition);
		return -1;
	}
	if (paraPosition >= paraListPtr->actualLengh) {
		printf("cannot delete element:the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLengh);
		return -1;
	}
	int resultValue = paraListPtr->data[paraPosition];
	for (int i = paraPosition; i < paraListPtr->actualLengh; i++)
	{
		paraListPtr->data[i] = paraListPtr->data[i + 1];//元素依次向前移动一位
	}
	paraListPtr->actualLengh--;
	return resultValue;
}
void sequentialDeleteTest() {
	int tempArray[5] = { 3,5,2,7,4 };
	printf("---- sequentialDeleteTest begins. ----\r\n");
	SequentialListPtr tempList = sequentialListInit(tempArray, 5);
	printf("After initialization, the list is: ");
	outputList(tempList);

	printf("Now delete the first, the list is: ");
	sequentailListDelete(tempList, 0);
	outputList(tempList);

	printf("Now delete the last, the list is: ");
	sequentailListDelete(tempList, 3);
	outputList(tempList);

	printf("Now delete the second, the list is: ");
	sequentailListDelete(tempList, 1);
	outputList(tempList);

	printf("Now delete the 5th, the list is: ");
	sequentailListDelete(tempList, 5);
	outputList(tempList);

	printf("Now delete the (-6)th, the list is: ");
	sequentailListDelete(tempList, -6);
	outputList(tempList);

	printf("---- sequentialDeleteTest ends. ----\r\n");
	outputMemory(tempList);
}
//查找特定元素的位置
int locateElement(SequentialListPtr paraListPtr, int ParaValue) {
	for (int i = 0; i < paraListPtr->actualLengh; i++) {
		if (paraListPtr->data[i] == ParaValue) {
			return i;
		}
	}
	return -1;
}
//查找特定位置的元素
int getElement(SequentialListPtr paraListPtr, int paraPosition) {
	if (paraPosition < 0) {
		printf("Invalid position:%d.\r\n", paraPosition);
		return -1;
	}
	if (paraPosition >= paraListPtr->actualLengh) {
		printf("Cannot get element:the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLengh);
		return -1;
	}
	return paraListPtr->data[paraPosition];
}
//清空线性表
void clearList(SequentialListPtr paraListPtr) {
	paraListPtr->actualLengh = 0;//表长变为0
}

int main()
{
	sequentailInsertTest();
	sequentialDeleteTest();
	return 0;
}

2.运行结果

3.图

4.心得体会

没有测试查找代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值