数据结构——顺序表(sequence list)
2024-09-02 08:46:22
/* sequenceList.c */
/* 顺序表 */
/* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表。 */ #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> #define MAXSIZE 10 /* 顺序表结构 */
typedef struct {
int data[MAXSIZE]; /* 数据列表 */
int last; /* 最后一个元素索引 */
} SeqList; /* 用户界面 */
void interface(void){
puts("+**********************************************+");
puts("+ 0, quit 退出 +");
puts("+ 1, insert 插入 +");
puts("+ 2, delete 删除 +");
puts("+ 3, locate 查找 +");
puts("+ 4, traverse 遍历 +");
puts("+ 5, fill 填充 +");
puts("+ 6, sort(ascend) 排序(升序) +");
puts("+ 7, sort(descend) 排序(降序) +");
puts("+**********************************************+");
} /* 顺序表函数声明 */
SeqList *initSeqList();
int insertSeqList(SeqList*, int, int);
int deleteSeqList(SeqList*, int);
int locateSeqList(SeqList*, int);
void traverseSeqList(SeqList*);
void fillSeqList(SeqList*, int);
void sortSeqList(SeqList*, bool); /* 程序主入口 */
int main(){
SeqList *sl = initSeqList();
int flag, number, index; interface();
for(;;){
printf("Command: ");
scanf("%d", &flag);
switch(flag){
case : printf("Bye!\n"); return ; break;
case :
printf("Enter index and nuumber: ");
scanf("%d %d", &index, &number);
insertSeqList(sl, index, number);
break;
case :
printf("Enter index: ");
scanf("%d", &index);
deleteSeqList(sl, index);
break;
case :
printf("Enter number: ");
scanf("%d", &number);
printf("index: %d\n", locateSeqList(sl, number));
break;
case :
traverseSeqList(sl);
break;
case :
printf("Enter number: ");
scanf("%d", &number);
fillSeqList(sl, number);
break;
case :
sortSeqList(sl, true);
break;
case :
sortSeqList(sl, false);
break;
}
} return ;
} /* 顺序表函数实现*/
/* 初始化顺序表 */
SeqList *initSeqList(){
SeqList *sl = (SeqList*)malloc(sizeof(SeqList));
sl->last = -;
return sl;
}
/* 顺序表的插入 */
int insertSeqList(SeqList *sl, int index, int num){
/* 查看是否顺序表已满 */
if(sl->last==MAXSIZE-){
printf("Sorry, there's no room left in sequence list.\n");
return -;
}
/* 检查插入位置是否合理 */
if(index < || index > MAXSIZE-){
printf("Sorry, wrong position.\n");
return ;
}
/* 插入数据 */
/* 从尾巴开始往前遍历,将index位置(包括index)后面所有元素往后移动一位 */
/* 空出index位置插入num */
for(int i = sl->last; i >= index; i--){
sl->data[i+] = sl->data[i];
}
sl->data[index] = num;
/* 如果last比index大,说明last还是指向最后一位,加一即可 */
/* 反之,则说明last在index前面,需要将last指向index */
if(sl->last>index){
sl->last++;
}else{
sl->last = index;
} return ;
}
/* 删除顺序表元素 */
int deleteSeqList(SeqList *sl, int index){
/* 检查是否为空 */
if(sl->last==-){
printf("Sorry, sequence list is empty.\n");
return ;
}
/* 检查是否在0-L->last范围内 */
if(index < || index > sl->last+){
printf("Sorry, index overflow error!\n");
return -;
}
/* 删除数据 */
/* 从头到尾遍历,找到index,将其后面的所有元素往上提,last-- */
for(int i = index; i < sl->last; i++){
sl->data[i] = sl->data[i+];
}
sl->last--; return ;
}
/* 按值查找顺序表元素 */
int locateSeqList(SeqList *sl, int num){
for(int i = ; i <= sl->last; i++){
if(sl->data[i]==num)
return i;
}
return -;
}
/* 遍历顺序表 */
void traverseSeqList(SeqList *sl){
for(int i = ; i <= sl->last; i++){
printf("%d -> ", sl->data[i]);
}
printf("NULL\n");
}
/* 用num填充顺序表 */
void fillSeqList(SeqList *sl, int num){
for(int i = ; i < MAXSIZE; i++){
sl->data[i] = num;
sl->last = MAXSIZE-;
}
}
/* 排序顺序表 */
void sortSeqList(SeqList *sl, bool ascend){
for(int i = ; i < sl->last; i++){
for(int j = i+; j <= sl->last; j++){
if(ascend){
if(sl->data[i]>sl->data[j]){
sl->data[i] ^= sl->data[j];
sl->data[j] ^= sl->data[i];
sl->data[i] ^= sl->data[j];
}
}else{
if(sl->data[i]<sl->data[j]){
sl->data[i] ^= sl->data[j];
sl->data[j] ^= sl->data[i];
sl->data[i] ^= sl->data[j];
}
}
}
}
}
最新文章
- eclipse报错:Failed to load the JNI shared library
- 文本换行word-wrap、word-break与white-space
- Android 为PopupWindow设置动画效果
- linux 大并发下 内核优化
- ArcGIS 10.1 for Desktop新特性之地理标记照片
- AngularJS 学习随笔(一)
- poj 1149 PIGS【最大流经典建图】
- PLSQL developer 连接不上64位Oracle 的解决方法
- 折腾gnome3.4
- java调用163邮箱发送邮件
- Android模仿iOS iMessages10照片选择器的实现
- git遇到的问题解决方案
- [Vue] vue中setInterval的问题
- CVE-2018-19386:SolarWinds数据库性能分析器中反射的XSS
- 24 GISer必备知识(一) 坐标系
- 潭州课堂25班:Ph201805201 django 项目 第二十五课 文章多级评论前后台实现 (课堂笔记)
- Flask web开发之路十
- 【配置】log4j.properties 详解与配置步骤
- Asp.net core 学习笔记 (授权)
- post请求参数Json字符串包含数组的校验和处理