目录
一、顺序表的定义及其特点
二、顺序表的运算
三、顺序表的实现
1、顺序表的创建
2、顺序表初始化
3、顺序表的插入
4、顺序表的删除
5、顺序表的查找
6、顺序表的输出
四、完整Demo
五、小结
六、参考文献
定义:顺序表是一种线性表的存储结构,它用一组地址连续的存储单位依次存储线性表中的数据元素。从而使得逻辑上相邻的两个元素在物理位置上也相邻。
特点:
顺序表的运算主要包括初始化、插入、删除和查找等操作。其中初始化是指将顺序表中所有元素都赋值为0或者空字符;插入操作需要将新元素插到指定位置,同时更新新顺序表的长度;删除操作需要将元素从顺序表中移除,并更新顺序表长度;查找操作需要在顺序表中查找一个元素,并返回其位置或未找到的表中。
1、顺序表的创建
typedef struct /*定义顺序表的数据结构*/
{
DataType data[MAXSIZE]; /*存储空间,数组*/
int length; /*顺序表的当前长度*/
}SeqList; /*顺序表的结构体类型*/
2、顺序表初始化
/*顺序表初始化*/
int init(SeqList *L)
{
L->length = 0; // 初始时,顺序表长度为0
return 0;
}
3、顺序表的插入
/*插入元素*/
int insert(SeqList *L, int i, DataType x)
{
int j;
/*判断是否满*/
if(full(L))
{ // 如果顺序表已满,则无法插入
printf("Error[10001],顺序表已满!\n");
return 10001;
}
/*判断位置i合法性*/
if(i<1 || i>length(L)+1) // 如果插入位置不合法,则无法插入
{
printf("Error[10002],位置i不合法!\n");
return 10002;
}
/*移动元素,向后移动*/
for(j=L->length;j>=i;j--) // 将插入位置后的元素依次后移一位
{
L->data[j] = L->data[j-1];
}
L->data[j] = x; // 在指定位置插入元素
L->length++; // 顺序表长度加1
return 0; /*ok!*/
}
4、 顺序表的删除
/*删除元素*/
int delete(SeqList *L, int i, DataType *x)
{
int k;
if(i<1||i>=L->length+1){ //如果删除位置不合法,则无法删除
printf("Error[1003],删除位置i不合法\n");
return 10003;
}
//将删除位置后的元素依次前移一位
for(k=i-1;klength-1;k++){
L->data[k]=L->data[k+1];
}
//顺序表长度减一
L->length--;
return 0;
}
5、 顺序表的查找
// 查找顺序表中是否存在指定元素,如果存在则返回其位置,否则返回-1
int find(SeqList *L, int x) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == x) { //如果当前遍历到的元素的值等于要查找的值x
return i; //返回当前元素下标
}
}
return 0;
}
6、顺序表的输出
void print(SeqList *L)
{
int i;
if(L->length==0)
{
printf("顺序表为空!");
return 0;
}
printf("顺序表为:");
for(i=0;ilength;i++)
{
printf(" %d ", L->data[i]);
}
printf("\n");
}
#include
#include "SeqList.h"
#include "welcome.h"
#include
int main(int argc, char* argv[])
{
SeqList L;
int cmd;
int i;
int m,n;
DataType x;
for(i=0;i
/*
SeqList.c 顺序表实现
*/
#include "SeqList.h"
/*顺序表初始化*/
int init(SeqList *L)
{
L->length = 0;
return 0;
}
/*顺序表的长度*/
int length(SeqList *L)
{
return L->length;
}
/*顺序表是否满*/
int full(SeqList *L)
{
return (L->length == MAXSIZE)?1:0;
}
/*是否空*/
int empty(SeqList *L)
{
return (L->length == 0)?1:0;
}
/*插入元素*/
int insert(SeqList *L, int i, DataType x)
{
int j;
/*判断是否满*/
if(full(L))
{
printf("Error[10001],顺序表已满!\n");
return 10001;
}
/*判断位置i合法性*/
if(i<1 || i>length(L)+1)
{
printf("Error[10002],位置i不合法!\n");
return 10002;
}
/*移动元素,向后移动*/
for(j=L->length;j>=i;j--)
{
L->data[j] = L->data[j-1];
}
L->data[j] = x;
L->length++;
return 0; /*ok!*/
}
/*删除元素*/
int delete(SeqList *L, int i, DataType *x)
{
int k;
if(i<1||i>=L->length+1){ //如果删除位置不合法,则无法删除
printf("Error[1003],删除位置i不合法\n");
return 10003;
}
//将删除位置后的元素依次前移一位
for(k=i-1;klength-1;k++){
L->data[k]=L->data[k+1];
}
//顺序表长度减一
L->length--;
return 0;
}
/*输出顺序表*/
void print(SeqList *L)
{
int i;
if(empty(L))
{
printf("顺序表为空!\n");
return 0 ;
}
printf("顺序表为:");
for(i=0;ilength;i++)
{
printf(" %d ", L->data[i]);
}
printf("\n");
}
/*查找元素*/
int find(SeqList *L,int x)
{
int i;
for (i=0;ilength;i++){
if (L->data[i]==x){
printf("元素【%d】在表中第【%d】个位置\n",x,i+1);
}
}
}
/*
SeqList.h 顺序表定义
*/
#define MAXSIZE 1000
typedef int DataType;
/*顺序表*/
typedef struct
{
DataType data[MAXSIZE];
int length;
}SeqList;
/*顺序表初始化*/
int init(SeqList *L);
/*顺序表的长度*/
int length(SeqList *L);
/*顺序表是否满*/
int full(SeqList *L);
/*是否空*/
int empty(SeqList *L);
/*插入元素*/
int insert(SeqList *L, int i, DataType x);
/*删除元素*/
int delete(SeqList *L, int i, DataType x);
/*输出顺序表*/
void print(SeqList *L);
/*查找元素*/
int find(SeqList *L, int i, DataType x);
char welcome[]=(
" ********\n"
" ************\n"
" ####....#.\n"
" #..###.....##....\n"
" ###.......###### ### ###\n"
" ........... #...# #...#\n"
" ##*####### #.#.# #.#.#\n"
" ####*******###### #.#.# #.#.#\n"
" ...#***.****.*###.... #...# #...#\n"
" ....**********##..... ### ###\n"
" ....**** *****....\n"
" #### ####\n"
" ###### ######\n"
"##############################################################\n"
"#...#......#.##...#......#.##...#......#.##------------------#\n"
"###########################################------------------#\n"
"#..#....#....##..#....#....##..#....#....#####################\n"
"########################################## #----------#\n"
"#.....#......##.....#......##.....#......# #----------#\n"
"########################################## #----------#\n"
"#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n"
"########################################## ############\n"
);
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############---------------------顺序表演示程序-------------------
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):1
顺序表已初始化!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):2
请输入插入位置i,插入元素x(i,x):1,2
元素【2】已插入位置【1】
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):2
请输入插入位置i,插入元素x(i,x):2,3
元素【3】已插入位置【2】
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):6
顺序表为: 2 3
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):3
请输入删除位置i(i):1
位置【1】上的元素已经删除
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):6
顺序表为: 3
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):4
顺序表不为空!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):5
顺序表未满!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):6
顺序表为: 3
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):7
请输入你要查找的元素x:3
元素【3】在表中第【1】个位置
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):8
本程序为顺序表的演示程序,有HQ设计开发,程序实现了对顺序表插入删除查找等功能!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 查找元素
8. 帮助
0. 退出
请输入您要进行的操作(1~8,0退出):0
Press any key to continue
本文详细介绍了顺序表的定义及其特点,以及初始化、插入、删除和查找等基本运算。通过一个简单的C程序实现,展示了顺序表的操作方法。最后,通过一个完整的Demo,验证了顺序表的正确性和可靠性。
《数据结构》(C语言版)李刚,刘万辉.北京:高等教育出版社 ,2017.
《C语言程序设计》(第四版)谭浩强. 北京:清华大学出版社,2014.
CSDN 数据结构-----顺序表基本操作