赞
踩
目录
定义:顺序表是一种线性表的存储结构,它用一组地址连续的存储单位依次存储线性表中的数据元素。从而使得逻辑上相邻的两个元素在物理位置上也相邻。
特点:
顺序表的运算主要包括初始化、插入、删除和查找等操作。其中初始化是指将顺序表中所有元素都赋值为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;k<L->length-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;i<L->length;i++)
- {
- printf(" %d ", L->data[i]);
- }
- printf("\n");
- }
- #include <stdio.h>
- #include "SeqList.h"
- #include "welcome.h"
- #include<string.h>
- int main(int argc, char* argv[])
- {
- SeqList L;
- int cmd;
- int i;
- int m,n;
-
- DataType x;
-
- for(i=0;i<strlen(welcome);i++)
- {
- printf("%c",welcome[i]);
- for(m=0;m<1000;m++)
- for(n=0;n<1000;n++)
- {
- ;
- }
- }
- printf("\n\n\n");
- printf("---------------------顺序表演示程序-------------------\n");
- do
- {
- printf("1. 初始化顺序表\n");
- printf("2. 插入元素\n");
- printf("3. 删除元素\n");
- printf("4. 判断顺序表是否为空\n");
- printf("5. 判断顺序表是否满\n");
- printf("6. 输出顺序表\n");
- printf("7. 查找元素\n");
- printf("8. 帮助\n");
- printf("0. 退出\n");
- printf("请输入您要进行的操作(1~8,0退出):");
- scanf("%d", &cmd);
- switch(cmd)
- {
- case 1:
- if(!init(&L))
- {
- printf("顺序表已初始化!\n");
- }
- break;
- case 2:
- printf("请输入插入位置i,插入元素x(i,x):");
- scanf("%d,%d",&i,&x);
- if(!insert(&L,i,x))
- {
- printf("元素【%d】已插入位置【%d】\n",x, i);
- }
- break;
- case 3:
- printf("请输入删除位置i(i):");
- scanf("%d",&i);
- if(!delete(&L,i,&x)){
- printf("位置【%d】上的元素已经删除\n",i, x);
- }
- break;
- case 4:
- if(empty(&L))
- {
- printf("顺序表为空\n");
- }
- else
- {
- printf("顺序表不为空!\n");
- }
- break;
-
- case 5:
- if(full(&L))
- {
- printf("顺序表已满!\n");
- }
- else
- {
- printf("顺序表未满!\n");
- }
- break;
- case 6:
- print(&L);
- break;
- case 7:
- printf("请输入你要查找的元素x:");
- scanf("%d",&x);
- find(&L,x,i);
- break;
- case 8:
- printf(" 本程序为顺序表的演示程序,有HQ设计开发,程序实现了对顺序表插入删除查找等功能!\n");
- break;
-
- }
- }while(cmd != 0);
-
- return 0;
- }
- /*
- 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;k<L->length-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;i<L->length;i++)
- {
- printf(" %d ", L->data[i]);
- }
- printf("\n");
- }
- /*查找元素*/
- int find(SeqList *L,int x)
- {
- int i;
- for (i=0;i<L->length;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 数据结构-----顺序表基本操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。