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", ¶List->actualLengh);
printf("The address of data: %ld\r\n", ¶List->data);
printf("The address of actual data: %ld\r\n", ¶List->data[0]);
printf("The address of second data: %ld\r\n", ¶List->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.心得体会
没有测试查找代码