版权声明:转载请注明本文链接 https://blog.csdn.net/qq_31844349/article/details/85320814
顺序存储结构的处理
什么是顺序存储结构?
顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。查看具体.
顺序表的存储示意图
代码操作
初始化线性表
//初始化链表
void InitList(PSeqList L){
if(isEmpty(L)){
exit(-1);
}
L->length = 0;
}
在指定位置插入数据
//在指定位置插入数据
void insertDataToPos(PSeqList L,int data,int pos){
if(isEmpty(L)|| L->length<1 || pos > L->length){
printf("线性表存在问题");
//非正常退出
exit(-1);
}
for(int i = L->length;i>pos;i--){
L->data[i] = L->data[i-1];
}
L->data[pos] = data;
L->length++;
}
获取线性表的长度
//获取线性表的长度
int getLengthList(PSeqList L){
if(isEmpty(L)){
printf("现行表为空");
return 0;
}
return L->length;
}
在队头插入数据
//在队头插入数据
void insertDataToHeat(PSeqList L,int data){
if(L->length == ListSize){
printf("队列已满");
}
//将表中的元素后移
for (int i = L->length;i>0;i--) {
L->data[i] = L->data[i - 1];
}
L->data[0] = data;
L->length++;
}
在队尾插入数据
//在队尾插入
void insertDateToTail(PSeqList L,int data){
if(isEmpty(L)){
printf("你的线性表不存在");
exit(-1);
}
//在队尾插入数据,就是在线性表的最后面插入,最后面就是线性表的长度
L->data[L->length] = data;
L->length++;
}
删除指定位置数据
//删除指定位置数据
void deleteDataToPos(PSeqList L,int pos){
if(isEmpty(L) || L->length<pos){
printf("所要删除的数据有问题");
exit(-1);
}
for(int i = pos;i<L->length;i++){
L->data[i] = L->data[i+1];
}
L->length--;
}
获取指定位置数据
//获取指定位置数据
int getTableToPos(PSeqList L,int pos){
if(isEmpty(L) || pos>L->length||pos<0){
printf("输入的位置是错误的");
exit(-1);
}
return L->data[pos];
}
打印表数据
//打印表数据
void printf_table(PSeqList L){
if(isEmpty(L)){
printf("表是空的");
exit(-1);
}
for (int i= 0;i<L->length;i++) {
printf("%d\t",L->data[i]);
}
printf("\n");
}
清空表
//清空表
void empty_Table(PSeqList L){
if(isEmpty(L)){
printf("表是空的");
exit(-1);
}
L->length = 0;
}
队头删除数据
//队头删除数据
void deleteDataToHeart(PSeqList L){
if(isEmpty(L)){
printf("队列是空的");
exit(-1);
}
for (int i = 0;i<L->length;i++) {
L->data[i] = L->data[i+1];
}
L->length--;
}
队尾删除数据
//队尾删除数据
void deleteDataToTail(PSeqList L){
if(isEmpty(L)){
printf("队列是空的");
exit(-1);
}
L->length--;
}
判断是否为空
//判断是否为空
int isEmpty(PSeqList L){
if(L == NULL){
return 1;
}else{
return 0;
}
}
整个操作代码
//
// main.c
// test
//
// Created by dark on 2018/12/22.
// Copyright © 2018年 dark. All rights reserved.
// 注:专业解释,所有线性表的插入删除问题全都是考虑的for循环条件的问题
#include <stdio.h>
#define ListSize 100
typedef struct{
int data[ListSize];
int length;
}SeqList,*PSeqList;
//初始化线性表
void InitList(PSeqList L);
//获取线性表的长度
int getLengthList(PSeqList L);
//在对头插入数据
void insertDataToHeat(PSeqList L,int data);
//在队尾插入
void insertDateToTail(PSeqList L,int data);
//指定位置插入数据
void insertDataToPos(PSeqList L,int data,int pos);
//删除指定位置数据
void deleteDataToPos(PSeqList L,int pos);
//返回线性表的指定元素值
int getTableToPos(PSeqList L,int pos);
//打印表数据
void printf_table(PSeqList L);
//清空
void empty_Table(PSeqList L);
//队头删除数据
void deleteDataToHeart(PSeqList L);
//队尾删除数据
void deleteDataToTail(PSeqList L);
//判空处理
int isEmpty(PSeqList L);
int main(int argc, const char * argv[]) {
SeqList L;
//初始化现行表
InitList(&L);
//在对头插入数据
insertDataToHeat(&L,22);
insertDataToHeat(&L,100);
insertDataToHeat(&L,40);
//在指定位置插入数据
insertDataToPos(&L,88,1);
insertDataToPos(&L,33,2);
//在队尾插入数据
insertDateToTail(&L,1998);
//获取指定位置的数据
printf("获取到的指定位置的数据:%d\n",getTableToPos(&L,3));
//删除指定位置的数据
deleteDataToPos(&L,1);
//打印线性表的数据
for(int i = 0;i<L.length;i++){
printf("%d\t",L.data[i]);
}
printf("\n");
//打印表数据
printf_table(&L);
//清空表
//empty_Table(&L);
//打印表数据
printf_table(&L);
//对头删除数据
deleteDataToHeart(&L);
//打印表数据
printf_table(&L);
//队尾删除数据
deleteDataToTail(&L);
//打印表数据
printf_table(&L);
printf("线性表长度:%d",L.length);
return 0;
}
//初始化链表
void InitList(PSeqList L){
if(isEmpty(L)){
exit(-1);
}
L->length = 0;
}
//在指定位置插入数据
void insertDataToPos(PSeqList L,int data,int pos){
if(isEmpty(L)|| L->length<1 || pos > L->length){
printf("线性表存在问题");
//非正常退出
exit(-1);
}
for(int i = L->length;i>pos;i--){
L->data[i] = L->data[i-1];
}
L->data[pos] = data;
L->length++;
}
//获取线性表的长度
int getLengthList(PSeqList L){
if(isEmpty(L)){
printf("现行表为空");
return 0;
}
return L->length;
}
//在对头插入数据
void insertDataToHeat(PSeqList L,int data){
if(L->length == ListSize){
printf("队列已满");
}
//将表中的元素后移
for (int i = L->length;i>0;i--) {
L->data[i] = L->data[i - 1];
}
L->data[0] = data;
L->length++;
}
//在队尾插入
void insertDateToTail(PSeqList L,int data){
if(isEmpty(L)){
printf("你的线性表不存在");
exit(-1);
}
//在队尾插入数据,就是在线性表的最后面插入,最后面就是线性表的长度
L->data[L->length] = data;
L->length++;
}
//删除指定位置数据
void deleteDataToPos(PSeqList L,int pos){
if(isEmpty(L) || L->length<pos){
printf("所要删除的数据有问题");
exit(-1);
}
for(int i = pos;i<L->length;i++){
L->data[i] = L->data[i+1];
}
L->length--;
}
//获取指定位置数据
int getTableToPos(PSeqList L,int pos){
if(isEmpty(L) || pos>L->length||pos<0){
printf("输入的位置是错误的");
exit(-1);
}
return L->data[pos];
}
//打印表数据
void printf_table(PSeqList L){
if(isEmpty(L)){
printf("表是空的");
exit(-1);
}
for (int i= 0;i<L->length;i++) {
printf("%d\t",L->data[i]);
}
printf("\n");
}
//清空表
void empty_Table(PSeqList L){
if(isEmpty(L)){
printf("表是空的");
exit(-1);
}
L->length = 0;
}
//队头删除数据
void deleteDataToHeart(PSeqList L){
if(isEmpty(L)){
printf("队列是空的");
exit(-1);
}
for (int i = 0;i<L->length;i++) {
L->data[i] = L->data[i+1];
}
L->length--;
}
//队尾删除数据
void deleteDataToTail(PSeqList L){
if(isEmpty(L)){
printf("队列是空的");
exit(-1);
}
L->length--;
}
//判断是否为空
int isEmpty(PSeqList L){
if(L == NULL){
return 1;
}else{
return 0;
}
}