顺序表作业

#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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值