顺序表的基本概念
顺序表使用一组连续的物理内存存储地址,按照次序存放线性表的元素。它的特点包括:
- 地址连续性:顺序表中的元素在内存中相邻,便于实现随机访问。
- 固定容量:顺序表的容量在创建时就确定,难以动态扩充。
顺序表的 C 语言的定义实现与使用
顺序表定义
#define MAXSIZE 6
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);
/*输出顺序表*/
void print(SeqList *L);
顺序表的实现
顺序表的初始化
int init(SeqList *L)
{
L->length = 0;
return 0;
}
顺序表的长度
int length(SeqList *L)
{
return L->length;
}
顺序表是否满
int length(SeqList *L)
{
return L->length;
}
顺序表是否空
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; /*true!*/
}
删除元素
int delete(SeqList *L, int i)
{
int j;
/*判断位置i合法性*/
if(i<1 || i>length(L)+1)
{
printf("Error[10002],位置i不合法!\n");
return 10002;
}
printf("位置k检查结束,开始删除...\n");
/*移动元素*/
for(i=j;i<L->length;i++)
{
L->data[i-1] = L->data[i];
}
L->length--;
printf("输出新的顺序表L\n");
for(i=0;i<L->length;i++)
{
printf("L(%d) = %d\n", i+1, L->data[i]);
}
return 0;
}
查找顺序表
void print(SeqList *L)
{
int i;
if(empty(L))
{
printf("顺序表为空!\n");
return ;
}
printf("顺序表为:");
for(i=0;i<L->length;i++)
{
printf(" %d ", L->data[i]);
}
printf("\n");
}
顺序表的使用
#include <stdio.h>
#include "SeqList.h"
#include "welcome.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<10000;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("10. 帮助\n");
printf("0. 退出\n");
printf("请输入您要进行的操作(1~6,0退出):");
scanf("%d", &cmd);
getchar();
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("请输入位置");
scanf("%d",&i);
if(!delete(&L,i)){
printf("已删除位置%d的元素\n",i);
}
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("顺序表元素长度为:%d\n",length(&L));
break;
case 10:
printf(" 本程序为顺序表的演示程序,有黄彬森设计开发,程序完成了功能!\n");
break;
default:
printf("请输入正常的序号\n");
}
}while(cmd != 0);
return 0;
}
完整代码
main.c文件代码
#include <stdio.h>
#include "SeqList.h"
#include "welcome.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<10000;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("10. 帮助\n");
printf("0. 退出\n");
printf("请输入您要进行的操作(1~6,0退出):");
scanf("%d", &cmd);
getchar();
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("请输入位置");
scanf("%d",&i);
if(!delete(&L,i)){
printf("已删除位置%d的元素\n",i);
}
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("顺序表元素长度为:%d\n",length(&L));
break;
case 10:
printf(" 本程序为顺序表的演示程序,有黄彬森设计开发,程序完成了功能!\n");
break;
default:
printf("请输入正常的序号\n");
}
}while(cmd != 0);
return 0;
}
SeqList.c文件代码
/*
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)
{
int j;
/*判断位置i合法性*/
if(i<1 || i>length(L)+1)
{
printf("Error[10002],位置i不合法!\n");
return 10002;
}
printf("位置k检查结束,开始删除...\n");
/*移动元素*/
for(i=j;i<L->length;i++)
{
L->data[i-1] = L->data[i];
}
L->length--;
printf("输出新的顺序表L\n");
for(i=0;i<L->length;i++)
{
printf("L(%d) = %d\n", i+1, L->data[i]);
}
return 0;
}
/*输出顺序表*/
void print(SeqList *L)
{
int i;
if(empty(L))
{
printf("顺序表为空!\n");
return ;
}
printf("顺序表为:");
for(i=0;i<L->length;i++)
{
printf(" %d ", L->data[i]);
}
printf("\n");
}
SeqList.h文件代码
#define MAXSIZE 6
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);
/*输出顺序表*/
void print(SeqList *L);
welcome.h文件代码
char welcome[] = "╭(●`?′●)╯╰(●’?’●)╮ (●’?’●)? ヾ (*′▽‘*)?";
代码运行结果
╭(●`?′●)╯╰(●’?’●)╮ (●’?’●)? ヾ (*′▽‘*)?
-----------顺序表演示程序----------
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):1
顺序表已初始化!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):1,10
元素(10)已插入位置[1]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):2,20
元素(20)已插入位置[2]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):3,30
元素(30)已插入位置[3]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):4,40
元素(40)已插入位置[4]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):5,50
元素(50)已插入位置[5]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):2
请输入位置i,插入元素x(i,x):6,60
元素(60)已插入位置[6]
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):5
顺序表已满!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):6
顺序表为: 10 20 30 40 50 60
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):7
顺序表元素长度为:6
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置1
位置k检查结束,开始删除...
输出新的顺序表L
L(1) = 20
L(2) = 30
L(3) = 40
L(4) = 50
L(5) = 60
已删除位置1的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置5
位置k检查结束,开始删除...
输出新的顺序表L
L(1) = 30
L(2) = 40
L(3) = 50
L(4) = 60
已删除位置5的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置1
位置k检查结束,开始删除...
输出新的顺序表L
L(1) = 40
L(2) = 50
L(3) = 60
已删除位置1的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置2
位置k检查结束,开始删除...
输出新的顺序表L
L(1) = 50
L(2) = 60
已删除位置2的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置2
位置k检查结束,开始删除...
输出新的顺序表L
L(1) = 60
已删除位置2的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):3
请输入位置1
位置k检查结束,开始删除...
输出新的顺序表L
已删除位置1的元素
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):4
顺序表为空!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):6
顺序表为空!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):10
本程序为顺序表的演示程序,有黄彬森设计开发,程序完成了功能!
1. 初始化顺序表
2. 插入元素
3. 删除元素
4. 判断顺序表是否为空
5. 判断顺序表是否满
6. 输出顺序表
7. 输出顺序表长度
10. 帮助
0. 退出
请输入您要进行的操作(1~6,0退出):0
请输入正常的序号
--------------------------------
Process exited after 202 seconds with return value 0
请按任意键继续. . .