#include <stdio.h>
#include <malloc.h>
#define LIST_MAX_LENGTH 10
/**
*整数的线性列表。关键是数据.
*/
typedef struct SequentialList {
int actualLength;
int data[LIST_MAX_LENGTH];
}*SequentialListPtr;
/**
*输出列表.
*/
voidoutputList(SequentialListPtr paraList){
for(int i = 0;i < paraList->actualLength; i ++) {
printf("%d ", paraList->data[i]);
}// Of for i
printf("\r\n");
}// Of outputList
/**
* 输出列表的内存.
*/
void outputMemory(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 actual data: %ld\r\n",¶ListPtr->data[0]);
printf("The address of second data: %d\r\n",¶ListPtr->data[1]);
}//输出内存
/**
*初始化顺序列表。检查此函数时没有错误.
*@param paraListPtr 指向列表的指针.
*@param paraValues 存储所有元素的整数数组.
*/
SequentialListPtr sequnentialListInit(int paraData[],int paraLength) {
SequentialListPtr resultPtr = (SequentialListPtr)malloc(sizeof(SequentialList));
for (int i = 0; i < paraLength; i ++){
resultPtr->data[i] = paraData[i];
}// Of for i
resultPtr->actualLength = paraLength;
return resultPtr;
}//Of sequrntialListInit
/**
*I在顺序线性列表中插入一个元素.
*@param paraListPtr 指向列表的指针。它必须是更改列表的指针.
*@param paraPosition 位置,例如,0代表在第一个位置插入.
*@param paraValue 要插入的值
.
*/
void sequentiallistInser(SwquentiallistPtr paraListPtr, int paraPosition,int paravalue){
// 第一步。空间检查.
if (paraListPtr->actualLength >=LIST_MAX_LENGTH){
printf("Cannot insert element: list full.\r\n");
return;
}//Of if
//第二步。位置检查。
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
//Setp 3. 移动剩下的部分。.
for (int i = paralistPtr->actualLength; i > paraposition ; i --) {
paralistPtr->data[i] = paralistPtr->data[i- 1];
}//Of for i
//Step 4. 插入.
paralistPtr->data[paraPosiontion] = paraValue;
//Step 5. 更新长度。
paralistPtr->actualLength ++;
}// 顺序列表插入
/**
* 测试insert函数。
*/
void sequentialInsertTest(){
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:");
ouotputList(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);
peintf("The list is:");
outputList(tempList);
//插入位置3。
for (i = 0; i < 5; i ++) {
printf("Inserting %d.\r\n",(i + 10));
sequentialListInsert(tempList, 0, (i + 10));
outputList(tempList);
}//Of for i
printf("---- sequentialInsertTest ends. ----\r\n");
}// 或顺序插入测试
/**
*从连续线性列表中删除元素。
*@param paraListptr 指向列表的指针。它必须是更改列表的指针.
*@param paraPosiontion 位置,例如,0代表在第一个位置插入。
*@return 删除的值。.
*/
int sequentialListDelete(SequentialListPtr paraListPtr, int paraPosition){
// Step 1. 位置检查。
if (paraPosition < 0){
printf("Invalid position: %d.\r\n", paraPosition);
return -1;
}//Of if
if (paraPosition >= paraListPtr->actualLength){
printf("Cannot delete element: the position %d beyond the list length %d.\r\n", paraposition, paraListPtr->actualLength);
return -1;
}//Of if
//Step 2. 移动剩下的部分。
int resultValue = paraListPtr->data[paraPoisition];
for (int i = paraPoisition; i < paraListPtr->actuaLength; i ++){
paraListPtr->data[i] = paraListPtr->data[i + 1];
}//Of for i
// Step 3. 更新长度。
paraListPtr->actualLength --;
//Step 4.返回值。
return resultValue;
}// Of sequentialListDelete
/**
*测试删除功能。
*/
void sequentialDeleteTest() {
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
/**
*在列表中找到一个元素。
* @param paraListPtr 指向列表的指针。
* @param paraValue 指示值。
* @返回值的位置,或-1表示不存在
*/
//查找指定位置的元素的下标
int localElement(SequentialListPtr paraListPtr,int paravalue)
{
for(int i=0;i<paraListPtr->actuallength;i++)
{
if(paraListPtr->date[i] == paravalue)
{
return i;
}
}
return -1;
}
//返回目的位置的元素
int getElement(SequentialListPtr paraListPtr, int paraPosition) {
//判断元素位置是否合法
if (paraPosition < 0) {
printf("错误位置: %d.\r\n", paraPosition);
return -1;
}
if (paraPosition >= paraListPtr->actualLength) {
printf("无法删除%d位置的元素,超出了线性表长度%d.\r\n", paraPosition, paraListPtr->actualLength);
return -1;
}
return paraListPtr->data[paraPosition];
}
/**
* Clear elements in the list.
* @param paraListPtr The pointer to the list.
* @return The position of the value, or -1 indicating not exists
*/
void clearList(SequentialListPtr paraListPtr) {
paraListPtr->actualLength = 0;
}// Of clearLis
/**
The entrance.
*/
void main() {
sequentialInsertTest();
sequentialDeleteTest();
}// Of main
数据结构顺序表(作业)
最新推荐文章于 2026-01-10 20:50:22 发布
本文档详细介绍了如何使用C语言实现顺序列表的初始化、插入、删除和查找功能,包括内存管理。通过实例展示了在`SequentialList`结构中操作整数数组,以及测试这些操作的效果。
3065

被折叠的 条评论
为什么被折叠?



