#include<stdio.h>
//初始化
#include <stdlib.h>
#define OK 1;
#define OVERFLOW -2
#define MAXSIZE 5//可能达到的最大长度
typedef int Status;
typedef int ElemType; //ElemType是线性表中数据元素的类型,此处用int
#define InitSize 10
typedef struct {
ElemType *elem; //指示动态分配数组的指针
ElemType length; //当前长度
} SqList;
//顺序表的动态初始化
Status InitList_Sq(SqList *L) {
L->elem = (int*) malloc(InitSize * sizeof(int)); //用malloc 函数申请一片连续的存储空间,并将首地址赋给L->elem
//该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL
//printf("%p\n", L->elem);
if (!L->elem)
exit(OVERFLOW); //存储失败
L->length = 0; //空表长度为零
return OK;
}
//插入元素
ElemType ListInsert(SqList *L, int i, int e) {
if ((i < 1) || (i > L->length + 1)) {
printf("插入失败\n");
return 0;
} else {
for (int j = L->length; j >= i; j--) //将第i个元素及之后的元素后移
L->elem[j] = L->elem[j - 1];
L->elem[i - 1] = e;
++L->length;
//printf("插入元素成功,插入位置为%d\n",i);
return 1;
//}
}
return 0;
}
//删除元素
ElemType ListDelete(SqList *L, int i) {
if (i < 0 || i > L->length - 1)
return 0;
for (int j = i; j < L->length; j++)
L->elem[j - 1] = L->elem[j];
L->length--;
return 1;
}
//按值查找
ElemType LocateElem(SqList L, int e) {
int i;
for (i = 0; i < L.length; i++) {
if (L.elem[i] == e)
return i + 1;
}
return 0;
}
//遍历线性表
Status ListTraverse(SqList L) {
ElemType *p;
p = L.elem;
int i;
printf("线性表当前容量为:%d\n", L.length);
if (L.length > 0) {
printf("当前线性表有%d个元素,分别是\n", L.length);
for (i = 1; i <= L.length; i++) {
printf("%d ", *p++);
}
printf("\n");
} else {
printf("目前还是空线性表.\n");
}
return 0;
}
int main() {
SqList la;
//初始化
InitList_Sq(&la);
//插入元素
ListInsert(&la, 1, 11);
ListInsert(&la, 2, 12);
ListInsert(&la, 3, 13);
ListInsert(&la, 4, 14);
ListInsert(&la, 5, 15);
ListInsert(&la, 6, 16);
ListInsert(&la, 1, 10);
//遍历元素
ListTraverse(la);
//删除元素
// ListDelete(&la, 4);
//
// //遍历元素
// ListTraverse(la);
//
// //按值查找
// int i = LocateElem(la, 12);
// printf("所查找元素的位置是:%d", i);
}
顺序表的基本操作 C语言版
最新推荐文章于 2022-09-28 23:33:24 发布