/*顺序表的简要实现
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
struct Sequence;
typedef struct Sequence* PtrToList;
typedef PtrToList List;
typedef int ElementType;
struct Sequence{
ElementType data[MAXSIZE];
int length;
};
List InitList();/*初始化顺序表*/
int GetElement(List L, int i);/*得到指定元素*/
void InsertElement(List L, int i, ElementType e);/*插入元素*/
void DeleteElement(List L, int i);/*删除元素*/
void ClearList(List L);/*清空顺序表*/
int ListLength(List L);/*得到顺序表长度*/
void IsEmpty(List L);/*检查顺序表是否为空*/
void ListTraverse(List L);/*遍历顺序表*/
/*初始化顺序表*/
List InitList(){
List L = malloc(sizeof(struct Sequence));
L->length = 0;
for (int i = 0; i < MAXSIZE; i++){
L->data[i] = 0;
}
return L;
}
/*得到指定元素*/
int GetElement(List L, int i){
if (L->length == 0 || i > L->length || i < 1)
return;
return L->data[i - 1];
}
/*插入元素*/
void InsertElement(List L, int i, ElementType e){
if (L->length == MAXSIZE)//如果表已经满了
return;
if (i < 1 || i > L->length + 1)//如果下标不在正确范围内
return;
if (i <= L->length){//如果查找的不是最后一个
for (int j = L->length - 1; j >= i - 1; j--){
L->data[j + 1] = L->data[j];
}
}
L->data[i - 1] = e;
L->length++;
}
/*删除元素*/
void DeleteElement(List L, int i){
if (L->length == 0)//如果表为空
return;
if (i > L->length + 1 || i < 1)//如果下标不在正确范围内
return;
if (i < L->length){//如果查找的不是最后一个
for (int j = i; j <= L->length - 1; j++){
L->data[j - 1] = L->data[j];
}
}
L->length--;
}
/*清空顺序表*/
void ClearList(List L){
L->length = 0;
}
/*得到顺序表长度*/
int ListLength(List L){
return L->length;
}
/*检查顺序表是否为空*/
void IsEmpty(List L){
if (L->length == 0)
printf("顺序表为空\n");
else
printf("顺序表不为空\n");
}
/*遍历顺序表*/
void ListTraverse(List L){
for (int i = 0; i < L->length; i++){
printf("%d ", L->data[i]);
}
printf("\n");
}
void main(){
List L;
L = InitList();//初始化顺序表
printf("表头依次插入10个元素: ");
for (int i = 1; i <= 10; i++){
InsertElement(L, 1, i);
}
ListTraverse(L);
printf("删除第5个元素: ");
DeleteElement(L, 5);
ListTraverse(L);
printf("第5个元素是: %d\n", GetElement(L, 5));
printf("顺序表长度为: %d\n", ListLength(L));
ClearList(L);
printf("清空顺序表,顺序表长度为: %d\n", ListLength(L));
IsEmpty(L);
printf("\n");
printf("表尾依次插入10个元素: ");
for (int i = 1; i <= 10; i++){
InsertElement(L, i, i);
}
ListTraverse(L);
printf("删除第5个元素: ");
DeleteElement(L, 5);
ListTraverse(L);
printf("第5个元素是: %d\n", GetElement(L, 5));
printf("顺序表长度为: %d\n", ListLength(L));
ClearList(L);
printf("清空顺序表,顺序表长度为: %d\n", ListLength(L));
IsEmpty(L);
}
学习笔记之数据结构篇-01顺序表
最新推荐文章于 2024-08-27 22:35:52 发布