#include<stdio.h> #include<stdlib.h> #define MaxSize 20 typedef struct student { int num; char name[11]; float dsScore; }ElemType; typedef struct { ElemType data[MaxSize];//存放线性表中的元素 int length ;//存放线性表的长度 }SqList; void CreateList(SqList *&L, ElemType a[],int n); void DispList(SqList *L); int main() { SqList *L; ElemType a[2]; int n=2; int i; //给学生信息数组赋值 for(i=0;i<2;i++) { printf("input num:"); scanf("%d",&a[i].num); printf("input name:"); scanf("%s",a[i].name); printf("input dsScore:"); scanf("%f",&a[i].dsScore); } //调用创建顺序表的函数,传参 CreateList(L,a,n); //调用输出顺表的函数 DispList(L); } //创建顺序表 void CreateList(SqList *&L, ElemType a[],int n) { int i=0,k=0; L=(SqList *)malloc(sizeof(SqList)); while(i<n) { L->data[i]=a[i]; k++; i++; } L-> length=k; printf("CreateList执行到结尾\n"); } void DispList(SqList *L)//输出线性表 { for(int i=0;i<L->length;i++) printf("%d %s %.2f\n",L->data[i].num,L->data[i].name,L->data[i].dsScore); printf("\n"); } bool GetElem(SqList *L ,int i,ElemType &e)//按序号求现行变中的元素 { if(i < 1||i > L ->length) return false; e = L ->data[i - 1]; return true; } int LocateElem(SqList * L,ElemType e)//按元素查找 { int i = 0; while(i < L ->length && L -> data[i]!= e) i++; if(i >= L -> length ) return 0; else return i + 1; } bool ListInsert(SqList *& L,int i,ElemType e)//插入数据元素 { int j; if(i < 1 ||i > L -> length + 1||L -> length == Maxsize) return false; i--; for(j = L -> length;j > i;j--) L ->data[j] = L -> data[j-1]; L -> data[i] = e ; L -> length++; return true; } bool ListDelet(SqList *& L,int i,ElemType &e)//删除数据元素 { int j; if(i < 1||i > L ->length) return false; i--; e = L ->data[i]; for (j = i;j < L ->length - 1;j++) L -> data[j] = L -> data[j+1];
时间: 2025-04-05 15:03:41 浏览: 74
### C语言顺序表的操作实现
以下是基于提供的参考资料以及标准的顺序表操作(创建、插入、删除、查找)的代码示例及其调试建议。
#### 1. 顺序表的定义
顺序表是一种线性数据结构,其元素按逻辑顺序依次存放在一块连续的存储空间中。可以通过静态数组或动态分配的方式实现[^1]。
---
#### 2. 创建顺序表
以下是一个简单的顺序表初始化代码:
```c
#define MAX_SIZE 100 // 假设最大容量为100
typedef struct {
int data[MAX_SIZE]; // 数据区
int length; // 当前长度
} SeqList;
// 初始化顺序表
void init_seq_list(SeqList *list) {
list->length = 0;
}
```
上述代码通过 `SeqList` 结构体表示顺序表,并将其初始状态设置为空列表。
---
#### 3. 插入操作
向顺序表中插入新元素时,需注意移动已有元素以保持顺序。
```c
int insert_seq_list(SeqList *list, int pos, int value) {
if (pos < 1 || pos > list->length + 1) { // 检查位置合法性
printf("Invalid position\n");
return -1;
}
if (list->length >= MAX_SIZE) { // 检查是否已满
printf("Sequence List is full\n");
return -1;
}
for (int i = list->length; i >= pos; --i) {
list->data[i] = list->data[i - 1];
}
list->data[pos - 1] = value;
++(list->length);
return 0;
}
```
此代码片段展示了如何在指定位置插入一个新值,并调整其他元素的位置。
---
#### 4. 删除操作
从顺序表中移除某个位置上的元素时,同样需要重新排列剩余的数据。
```c
int delete_seq_list(SeqList *list, int pos) {
if (pos < 1 || pos > list->length) { // 检查位置合法性
printf("Invalid position\n");
return -1;
}
for (int i = pos; i < list->length; ++i) {
list->data[i - 1] = list->data[i];
}
--(list->length);
return 0;
}
```
该部分实现了删除功能,并处理了边界情况下的异常检测[^4]。
---
#### 5. 查找操作
提供一种简单的方法用于定位特定数值所在索引。
```c
int search_seq_list(const SeqList *list, int target) {
for (int i = 0; i < list->length; ++i) {
if (list->data[i] == target) {
return i + 1; // 返回找到的第一个匹配项的位置
}
}
return -1; // 如果未找到,则返回-1
}
```
以上方法遍历整个序列直到发现目标为止;如果不存在这样的元素,则报告失败。
---
#### 调试技巧与注意事项
当遇到内存管理问题时,务必验证每次申请资源后的有效性,比如使用 `malloc()` 后应立即测试返回值是否为 NULL[^2]。另外,在释放任何对象之前确认不再对其引用是非常重要的安全措施之一[^5]。
对于复杂算法或者难以理解的部分,可以尝试绘制流程图辅助思考过程,这有助于更直观地了解每一步骤的作用及相互关系。
---
阅读全文
相关推荐


















