#include <stdio.h>
#include <malloc.h>
#define LIST_MAX_LENGTH 10
/*定义指向线性表的指针*/
typedef struct SquentialList {
int actualLength;
int data[LIST_MAX_LENGTH];
} *SquentialListPtr;
void outputList(SquentialListPtr ParaList ){
for(int i=0;i<ParaList->actualLength;i++){
printf("%d ",ParaList->data[i]);
}
printf("\r\n");
}
/*打印地址*/
void outputMemory(SquentialListPtr ParaListPtr){
printf("The address of the structure: %ld\r\n",ParaListPtr);
printf("The address of actualLength: %ld\r\n",&ParaListPtr->actualLength);
printf("The address of data: %ld\r\n",&ParaListPtr->data);
printf("The address of actual data: %ld\r\n",&ParaListPtr->data[0]);
printf("The address of second data: %ld\r\n",&ParaListPtr->data[1]);
}
SquentialListPtr SquentialListInit(int ParaData[] ,int ParaLength){
SquentialListPtr resultPtr = (SquentialListPtr)malloc(sizeof(struct SquentialList));
for(int i = 0;i<ParaLength;i++){
resultPtr->data[i] = ParaData[i];
}
resultPtr->actualLength = ParaLength;
return resultPtr;
}
void SquentialListInsert(SquentialListPtr ParaListPtr, int ParaPosition, int ParaValue){
if(ParaListPtr->actualLength >= LIST_MAX_LENGTH){
printf("Cannot insert element: list full\r\n");
return;
}
if(ParaPosition<0){
printf("Cannot insert element: list full\r\n");
return;
}
if(ParaPosition>ParaListPtr->actualLength){
printf("cannot insert element: the position %d is bigger than the Length %d.\r\n",ParaPosition,ParaListPtr->actualLength);
return ;
}
for(int i = ParaListPtr->actualLength ;i>ParaPosition;i--){
ParaListPtr->data[i] = ParaListPtr->data[i-1];
}
ParaListPtr->data[ParaPosition] = ParaValue;
ParaListPtr->actualLength++;
}
void SquentialInsertTest(){
int i;
int tempArray[5]={3,5,2,7,4};
printf("SquentialInsertTest begins. \r\n");
SquentialListPtr tempList = SquentialListInit(tempArray,5);
printf("After Initialization,the List is:");
outputList(tempList);
//Insert to the last//
printf("Now Insert to the last,the List is");
SquentialListInsert(tempList,6,9);
outputList(tempList);
//Insert to Position 3//
for(i=0;i<5;i++){
printf("Inserting %d.\r\n", (i + 10));
SquentialListInsert(tempList, 0, i + 10);
outputList(tempList);
}
printf("---- sequentialInsertTest ends. ----\r\n");
}
int SquentialListDelete (SquentialListPtr ParaList,int ParaPosition){
if(ParaPosition<0){
printf("Invalid Position: %d.\r\n",ParaPosition);
return -1;
}
if(ParaPosition>ParaList->actualLength){
printf("Cannot delete the element,the Position %d is beyond the Length %d.\r\n ",ParaPosition,ParaList->actualLength);
return -1;
}
int resultValue = ParaList->data[ParaPosition];
for(int i = ParaPosition;i<ParaList->actualLength;i++){
ParaList->data[i] = ParaList->data[i+1];
}
//update the length//
ParaList->actualLength--;
//return the value//
return resultValue;
}
void SquentialListDeleteTest()
{
int tempArray[5] = {3,5,2,7,4};
printf("---- sequentialDeleteTest begins. ----\r\n");
//Initializa//
SquentialListPtr tempList = SquentialListInit(tempArray,5);
printf("After initialization, the list is: ");
outputList(tempList);
//Delete the first//
SquentialListDelete(tempList,0);
outputList(tempList);
//Delete the last//
SquentialListDelete(tempList,3);
//Delsete the second//
SquentialListDelete(tempList,1);
// Delete the second.
printf("Now delete the 5th, the list is: ");
SquentialListDelete(tempList, 5);
outputList(tempList);
// Delete the second.
// 删除倒数第六个 //
printf("Now delete the (-6)th, the list is: ");
SquentialListDelete(tempList, -6);
outputList(tempList);
printf("---SquentialDeleteTest ends---\r\n");
outputMemory(tempList);
}
int LocateElement(SquentialListPtr ParaList,int ParaValue){
for(int i = 0;i<ParaList->actualLength;i++){
if (ParaList->data[i]==ParaValue){
return i;
}
}
return -1;
}//Of locateElement
int GetElement(SquentialListPtr ParaListPtr, int ParaPosition){
if(ParaPosition < 0){
printf("Invalid position: %d.\r\n", ParaPosition);
return -1;
}
if(ParaPosition>=ParaListPtr->actualLength){
printf("Cannot get element: the position %d is beyond the list length %d.\r\n", ParaPosition, ParaListPtr->actualLength);
return -1;
}
return ParaListPtr->data[ParaPosition];
}
void clearList(SquentialListPtr paraListPtr){
paraListPtr->actualLength = 0;
}
int main(){
SquentialInsertTest();
SquentialListDeleteTest();
}