顺序表的基本操作与使用(C语言)

顺序表的基本概念

顺序表使用一组连续的物理内存存储地址,按照次序存放线性表的元素。它的特点包括:

  1. 地址连续性:顺序表中的元素在内存中相邻,便于实现随机访问。
  2. 固定容量:顺序表的容量在创建时就确定,难以动态扩充。

顺序表的 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
请按任意键继续. . .

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值