顺序表的基本运算。

问题及代码:

/* 
 *Copyright(c) 2015,烟台大学计算机与控制工程学院 
 *All rights reserved. 
 *文件名称:test.cpp 
 *作    者:刘磊 
 *完成日期:2015.9.21 
 *版 本 号:v1.0 
 * 
 *问题描述:实现顺序表的基本运算。 
 *输入描述:建立一个线性表。 
 *程序输出: 线性表的算法DispList.
*/  

#include <stdio.h>
#include <malloc.h>

#define MaxSize 50    //Maxsize将用于后面定义存储空间的大小
typedef int ElemType;  //ElemType在不同场合可以根据问题的需要确定,在此取简单的int
typedef struct
{
    ElemType data[MaxSize];  //利用了前面MaxSize和ElemType的定义
    int length;
} SqList;

//自定义函数声明部分
void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
void DispList(SqList *L);//输出线性表DispList(L)
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)

//实现测试函数
int main()
{
    SqList *sq;
    ElemType x[6]= {5,8,7,2,4,9};
    CreateList(sq, x, 6);
    DispList(sq);
    return 0;
}

//下面实现要测试的各个自定义函数
//用数组创建线性表
void CreateList(SqList *&L, ElemType a[], int n)
{
    int i;
    L=(SqList *)malloc(sizeof(SqList));
    for (i=0; i<n; i++)
        L->data[i]=a[i];
    L->length=n;
}

//输出线性表DispList(L)
void DispList(SqList *L)
{
    int i;
    if (ListEmpty(L))
        return;
    for (i=0; i<L->length; i++)
        printf("%d ",L->data[i]);
    printf("\n");
}

//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
    return(L->length==0);
}


 

运行结果:

知识点总结:

运用了创建线性表的实现和顺序表基本运算的实现。

学习心得:深刻体会到了“0207将算法编程序”部分建议的方法,学会了将顺序表部分的算法变成程序。

### 关于顺序表基本运算的实验报告 #### 初始化顺序表 在 C++ 中,可以通过模板类 `SeqList` 来定义并初始化一个顺序表。以下是基于引用的内容实现的一个简单例子: ```cpp #include <iostream> using namespace std; const int MAX_LENGTH = 100; // 定义最大长度 template<class T> class SeqList { public: SeqList(int n); // 构造函数用于初始化顺序表 private: T data[MAX_LENGTH]; int length; }; // 初始化顺序表 template<class T> SeqList<T>::SeqList(int n) { if (n > MAX_LENGTH) { throw invalid_argument("参数非法"); } for (int i = 0; i < n; ++i) { cin >> data[i]; // 输入初始数据 } length = n; } ``` 此部分实现了顺序表的初始化功能[^1]。 #### 动态分配内存的顺序表 对于动态分配内存的方式,在 C 语言中可以使用 `malloc()` 函数来创建顺序表,并通过指针访问其内部存储的数据。下面是一个简单的示例代码片段: ```c #include <stdio.h> #include <stdlib.h> typedef struct LinearList { int* list; int size; } LIST; void InitList(LIST* L, int ms) /* 初始化线性表 */{ if ((L->list = (int*) malloc(ms * sizeof(int))) == NULL){ printf("Memory allocation failed.\n"); exit(1); } L->size = ms; } void DestroyList(LIST* L){ free(L->list);} ``` 这段代码展示了如何利用动态内存管理技术构建顺序表以及释放资源的方法[^2]。 #### 循环队列中的顺序表示例 当涉及到更复杂的场景比如循环队列时,则需要考虑更多边界条件处理等问题。这里给出一段伪代码描述该过程的一部分逻辑: ```plaintext while(!isFull(queue)){ enqueue(queue,value1); enqueue(queue,value2); dequeue(&value,&queue); print(value); } if(isFull(queue)){ while(!isEmpty(queue)){ dequeue(&value,&queue); markAsSpecialOutput(value); } } ``` 上述伪代码体现了按照特定规则进出队列的过程[^3]。 #### 常见错误分析及注意事项 编写此类程序时常遇到一些典型问题,例如索引越界、数组下标混乱等。特别是删除指定位置元素时需要注意实际物理地址与用户感知到的位置差异。另外,“尾插法”指的是新节点总是附加到最后一位;而“头插法则相反”,即将新的结点放置于链首处[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值