//依旧是个无聊的遍历for(int i =0; i < paraList->actualLength; i++){printf("%d ", paraList->data[i]);}putchar('\n');
打印各项数据地址:
voidoutputMemory(SequentialListPtr paraListPtr){printf("The address of the structure:%ld\r\n", paraListPtr);printf("The address of actualLength:%ld\r\n",¶ListPtr->actualLength);printf("The address of data:%ld\r\n",¶ListPtr->data);printf("The address of the actual data:%ld\r\n",¶ListPtr->data[0]);printf("The address of the second data:%ld\r\n",¶ListPtr->data[1]);}
复制一个一样的线性表:
SequentialListPtr sequentialListInit(int paraData[],int paraLength){
SequentialListPtr resultPtr =(SequentialListPtr)malloc(sizeof(structSequentialList));//动态申请 有个缺点 最后好像没释放for(int i =0; i < paraLength; i ++){
resultPtr->data[i]= paraData[i];}//
resultPtr->actualLength = paraLength;//复制一个长度return resultPtr;}//Of sequentialListInit
向表中插入值:
voidsequentialListInsert(SequentialListPtr paraListPtr,int paraPosition,int paraValue){// Step 1. Space check.//判断是否还有容纳空间if(paraListPtr->actualLength >= LIST_MAX_LENGTH){printf("Cannot insert element: list full.\r\n");return;}//Of if// Step 2. Position check.//判断插入顺序是否合法if(paraPosition <0){printf("Cannot insert element: negative position unsupported.");return;}//Of if//同上判断合法if(paraPosition > paraListPtr->actualLength){printf("Cannot insert element: the position %d is bigger than the list length %d.\r\n", paraPosition,
paraListPtr->actualLength);return;}//Of if// Step 3. Move the remaining part.//从插入位置开始后面的依次往后挪一个位置 给新插入函数提供空位置for(int i = paraListPtr->actualLength; i > paraPosition; i --){
paraListPtr->data[i]= paraListPtr->data[i -1];}//Of for i// Step 4. Insert.//给值
paraListPtr->data[paraPosition]= paraValue;// Step 5. Update the length.//长度+1
paraListPtr->actualLength ++;}// Of sequentialListInsert
测试插入:
voidsequentialInsertTest(){int i;int tempArray[5]={3,5,2,7,4};printf("---- sequentialInsertTest begins. ----\r\n");// Initialize.
SequentialListPtr tempList =sequentialListInit(tempArray,5);printf("After initialization, the list is: ");outputList(tempList);// Insert to the first.printf("Now insert to the first, the list is: ");sequentialListInsert(tempList,0,8);outputList(tempList);// Insert to the last.printf("Now insert to the last, the list is: ");sequentialListInsert(tempList,6,9);outputList(tempList);// Insert beyond the tail.printf("Now insert beyond the tail. \r\n");sequentialListInsert(tempList,8,9);printf("The list is:");outputList(tempList);// Insert to position 3.for(i =0; i <5; i ++){printf("Inserting %d.\r\n",(i +10));sequentialListInsert(tempList,0,(i +10));outputList(tempList);}//Of for iprintf("---- sequentialInsertTest ends. ----\r\n");}// Of sequentialInsertTest
删除数据:
intsequentialListDelete(SequentialListPtr paraListPtr,int paraPosition){// Step 1. Position check.//依旧进行判断是否合法删除if(paraPosition <0){printf("Invalid position: %d.\r\n", paraPosition);return-1;}//Of ifif(paraPosition >= paraListPtr->actualLength){printf("Cannot delete element: the position %d is beyond the list length %d.\r\n", paraPosition,
paraListPtr->actualLength);return-1;}//Of if// Step 2. Move the remaining part.int resultValue = paraListPtr->data[paraPosition];//删除完了往前挪吧for(int i = paraPosition; i < paraListPtr->actualLength; i ++){
paraListPtr->data[i]= paraListPtr->data[i +1];}//Of for i// Step 3. Update the length.
paraListPtr->actualLength --;// Step 4. Return the value.return resultValue;}// Of sequentialListDelete
删除测试:
voidsequentialDeleteTest(){int tempArray[5]={3,5,2,7,4};printf("---- sequentialDeleteTest begins. ----\r\n");// Initialize.
SequentialListPtr tempList =sequentialListInit(tempArray,5);printf("After initialization, the list is: ");outputList(tempList);// Delete the first.printf("Now delete the first, the list is: ");sequentialListDelete(tempList,0);outputList(tempList);// Delete to the last.printf("Now delete the last, the list is: ");sequentialListDelete(tempList,3);outputList(tempList);// Delete the second.printf("Now delete the second, the list is: ");sequentialListDelete(tempList,1);outputList(tempList);// Delete the second.printf("Now delete the 5th, the list is: ");sequentialListDelete(tempList,5);outputList(tempList);// Delete the second.printf("Now delete the (-6)th, the list is: ");sequentialListDelete(tempList,-6);outputList(tempList);printf("---- sequentialDeleteTest ends. ----\r\n");outputMemory(tempList);}// Of sequentialDeleteTest
locateElement:
intlocateElement(SequentialListPtr paraListPtr,int number){for(int i =0; i < paraListPtr->actualLength; i ++){if(paraListPtr->data[i]== number){return i;}// Of if//遍历找对应数字 返回其下标}//Of for ireturn-1;//未找到 返回-1}//
getElement:
intgetElement(SequentialListPtr paraListPtr,int Position){// Step 1. Position check.if(Position <0|| Position > LIST_MAX_LENGTH){//判断输入位置是否合法printf("Invalid position: %d.\r\n", Position);return-1;}//Of if//一个if 判断更加简便直接return paraListPtr->data[Position];//合法即返回值}//
clearList:
voidclearList(SequentialListPtr paraListPtr){for(int i =0; i < LIST_MAX_LENGTH; i++){
paraListPtr->data[i]=0;}//初始化数组值
paraListPtr->actualLength =0;//长度初始0;}//
总体代码:
#include<stdio.h>#include<malloc.h>#defineLIST_MAX_LENGTH10typedefstructSequentialList{int actualLength;int data[LIST_MAX_LENGTH];}*SequentialListPtr ;//输出线性表voidoutputList(SequentialListPtr paraList){//依旧是个无聊的遍历for(int i =0; i < paraList->actualLength; i++){printf("%d ", paraList->data[i]);}putchar('\n');}//打印各项数据地址叭voidoutputMemory(SequentialListPtr paraListPtr){printf("The address of the structure:%ld\r\n", paraListPtr);printf("The address of actualLength:%ld\r\n",¶ListPtr->actualLength);printf("The address of data:%ld\r\n",¶ListPtr->data);printf("The address of the actual data:%ld\r\n",¶ListPtr->data[0]);printf("The address of the second data:%ld\r\n",¶ListPtr->data[1]);}//复制一个一样的线性表
SequentialListPtr sequentialListInit(int paraData[],int paraLength){
SequentialListPtr resultPtr =(SequentialListPtr)malloc(sizeof(structSequentialList));//动态申请 有个缺点 最后好像没释放for(int i =0; i < paraLength; i ++){
resultPtr->data[i]= paraData[i];}//
resultPtr->actualLength = paraLength;//复制一个长度return resultPtr;}//Of sequentialListInit//插入值voidsequentialListInsert(SequentialListPtr paraListPtr,int paraPosition,int paraValue){// Step 1. Space check.//判断是否还有容纳空间if(paraListPtr->actualLength >= LIST_MAX_LENGTH){printf("Cannot insert element: list full.\r\n");return;}//Of if// Step 2. Position check.//判断插入顺序是否合法if(paraPosition <0){printf("Cannot insert element: negative position unsupported.");return;}//Of if//同上判断合法if(paraPosition > paraListPtr->actualLength){printf("Cannot insert element: the position %d is bigger than the list length %d.\r\n", paraPosition,
paraListPtr->actualLength);return;}//Of if// Step 3. Move the remaining part.//从插入位置开始后面的依次往后挪一个位置 给新插入函数提供空位置for(int i = paraListPtr->actualLength; i > paraPosition; i --){
paraListPtr->data[i]= paraListPtr->data[i -1];}//Of for i// Step 4. Insert.//给值
paraListPtr->data[paraPosition]= paraValue;// Step 5. Update the length.//长度+1
paraListPtr->actualLength ++;}// Of sequentialListInsert//--------------------------------------------------------------------------------------------------------//测试插入voidsequentialInsertTest(){int i;int tempArray[5]={3,5,2,7,4};printf("---- sequentialInsertTest begins. ----\r\n");// Initialize.
SequentialListPtr tempList =sequentialListInit(tempArray,5);printf("After initialization, the list is: ");outputList(tempList);// Insert to the first.printf("Now insert to the first, the list is: ");sequentialListInsert(tempList,0,8);outputList(tempList);// Insert to the last.printf("Now insert to the last, the list is: ");sequentialListInsert(tempList,6,9);outputList(tempList);// Insert beyond the tail.printf("Now insert beyond the tail. \r\n");sequentialListInsert(tempList,8,9);printf("The list is:");outputList(tempList);// Insert to position 3.for(i =0; i <5; i ++){printf("Inserting %d.\r\n",(i +10));sequentialListInsert(tempList,0,(i +10));outputList(tempList);}//Of for iprintf("---- sequentialInsertTest ends. ----\r\n");}// Of sequentialInsertTest//--------------------------------------------------------------------------------------------------------//删除数据intsequentialListDelete(SequentialListPtr paraListPtr,int paraPosition){// Step 1. Position check.//依旧进行判断是否合法删除if(paraPosition <0){printf("Invalid position: %d.\r\n", paraPosition);return-1;}//Of ifif(paraPosition >= paraListPtr->actualLength){printf("Cannot delete element: the position %d is beyond the list length %d.\r\n", paraPosition,
paraListPtr->actualLength);return-1;}//Of if// Step 2. Move the remaining part.int resultValue = paraListPtr->data[paraPosition];//删除完了往前挪吧for(int i = paraPosition; i < paraListPtr->actualLength; i ++){
paraListPtr->data[i]= paraListPtr->data[i +1];}//Of for i// Step 3. Update the length.
paraListPtr->actualLength --;// Step 4. Return the value.return resultValue;}// Of sequentialListDelete//--------------------------------------------------------------------------------------------------------//删除测试voidsequentialDeleteTest(){int tempArray[5]={3,5,2,7,4};printf("---- sequentialDeleteTest begins. ----\r\n");// Initialize.
SequentialListPtr tempList =sequentialListInit(tempArray,5);printf("After initialization, the list is: ");outputList(tempList);// Delete the first.printf("Now delete the first, the list is: ");sequentialListDelete(tempList,0);outputList(tempList);// Delete to the last.printf("Now delete the last, the list is: ");sequentialListDelete(tempList,3);outputList(tempList);// Delete the second.printf("Now delete the second, the list is: ");sequentialListDelete(tempList,1);outputList(tempList);// Delete the second.printf("Now delete the 5th, the list is: ");sequentialListDelete(tempList,5);outputList(tempList);// Delete the second.printf("Now delete the (-6)th, the list is: ");sequentialListDelete(tempList,-6);outputList(tempList);printf("---- sequentialDeleteTest ends. ----\r\n");outputMemory(tempList);}// Of sequentialDeleteTest//--------------------------------------------------------------------------------------------------------//111111111111intlocateElement(SequentialListPtr paraListPtr,int number){for(int i =0; i < paraListPtr->actualLength; i ++){if(paraListPtr->data[i]== number){return i;}// Of if//遍历找对应数字 返回其下标}//Of for ireturn-1;//未找到 返回-1}////111111111111intgetElement(SequentialListPtr paraListPtr,int Position){// Step 1. Position check.if(Position <0|| Position > LIST_MAX_LENGTH){//判断输入位置是否合法printf("Invalid position: %d.\r\n", Position);return-1;}//Of if//一个if 判断更加简便直接return paraListPtr->data[Position];//合法即返回值}////111111111111voidclearList(SequentialListPtr paraListPtr){for(int i =0; i < LIST_MAX_LENGTH; i++){
paraListPtr->data[i]=0;}//初始化数组值
paraListPtr->actualLength =0;//长度初始0;}//intmain(){sequentialInsertTest();sequentialDeleteTest();}// Of main