C语言 数据结构之顺序表(基本操作)

这篇博客主要介绍了C语言中顺序表的基本操作,包括初始化、合法判定、打印、赋值、查看长度、查看前后继、清空、插入和删除等。作者作为初学者,指出相关排序和查找算法将在后续更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文只涉及顺序表的基本操作,由于本人是初学者所以相关排序和查找等算法后期更新。

本文涉及顺序表的以下内容:

  1. 顺序表的初始化
  2. 顺序表的合法判定
  3. 顺序表成员的打印
  4. 顺序表成员的赋值
  5. 顺序表长度的查看
  6. 查看顺序表的前驱和后继
  7. 顺序表成员的清空
  8. *顺序表成员的插入
  9. *顺序表成员的删除
/*顺序表test*/
#include<iostream>
#include<stdlib.h>
#include<string.h>
#define max_size 100
#define OK 1
#define error 0
typedef int Status;
typedef int inttype;
typedef struct{
      int data[max_size];    
      int length;
}SQList;
//初始化列表
Status initList(SQList &L){
     memset(L.data,0,sizeof(SQList));   
     L.length=0;
     return OK;
}
//判断顺序表是否合法
bool judgeList(SQList &L,int l){
    if (l<0||l>max_size)
    {
        return false;
    }
    else
    return true;    
}
//打印顺序表
void printlist(SQList &L){
    if(L.length==0){printf("没有成员!\n");}
    else{
    printf("当前顺序表长度为%d且成员如下:\n",L.length);
    for(int i=0;i<L.length;i++){
        printf("%d\t",L.data[i]);
    }
    }
    printf("\n \n");
} 
//赋值列表
void createElem(SQList &L){ 
    int l;
    bool j;
    printf("请输入顺序表长度:");
    scanf("%d",&l);
    if(l==0)printf("此表为空表\n");
    j=judgeList(L,l);
    if(j==1){
    for(int i =0;i<l;i++){
            printf("请输入%d个数字:",i+1);
            scanf("%d",&L.data[i]);
            L.length++;
    }printlist(L);   
    }
    else{
        printf("顺序表长度非法,长度范围应为(0~100)\n");        
    }   
}
//查看顺序表长度
void getListlength(SQList &L){
    printf("表长度为:%d\n",L.length);
        printf("\n \n");
}
//查看某个成员的前驱
void priorElem(SQList &L){
    int s;
    printf("请输入所查看的成员:");
    scanf("%d",&s);
    if(s==L.data[0])printf("该成员为第一个成员所以没有前驱!\n");  
    for(int i=1;i<L.length;i++){
       if(L.data[i]==s)printf("该成员的前驱为:%d\n",L.data[i-1]);
    }
    }
//查看某个成员的后继
void nextElem(SQList &L){
    int s;
    printf("请输入要查看的成员:");
    scanf("%d",&s);
    if(s==L.data[L.length-1])printf("该成员为最后一个,所以没有后继!\n");
    for(int i=0;i<L.length-1;i++)
    {if(L.data[i]==s)printf("该成员的后继为:%d\n",L.data[i+1]);
    }
}
//顺序表某个新成员的插入
void listinsert(SQList &L){
      int i,a;
    printf("请输入所插入的新成员:");
    scanf("%d",&i);
    printf("请输入所插入的位置,位置范围(0~%d):",L.length);
    scanf("%d",&a);
    for(int f=L.length;f>=a;f--){
    L.data[f]=L.data[f-1];
       if(f==a)L.data[a]=i;
    }
    L.length++;
    printlist(L);
}
//删除顺序表中某个成员
void deleteElem(SQList &L){
   int d,a;
   printf("请输入所删除的成员:");
   scanf("%d",&d);
   for(int f=0;f<L.length;f++){
   if(d==L.data[f])a=f;
}
    for(int f=a;f<L.length-1;f++){
      L.data[f]=L.data[f+1];
    }
    L.length--;
    printlist(L);
}
//清空顺序表
void clearList(SQList &L){
    memset(L.data,0,sizeof(SQList));
    L.length=0;
    printf("已清空!\n");
    printlist(L);
}
//操作代码菜单
 void opreatmenu()
    {
        printf("**********操作代码**********\n");
        printf("顺序表的创建-----1\t顺序表的清空-----2\t查看顺序表长-----3\t获得顺序表成员-----4\n查看成员前驱-----5\t查看表成员后继-----6\t新成员插入表-----7\t某个表成员删除-----8\t退出程序----9\n");
        printf("***************************\n \n");
    }
//主函数
int main(){
    SQList L;
    int j,choice;
    j=initList(L);
    if(j==1){
        while(1){
            opreatmenu();
            printf("请输入操作代码:");
            scanf("%d",&choice);
            if(choice==9)break;
            switch(choice){
                case 1: createElem(L);break;
                case 2: clearList(L);break;
                case 3: getListlength(L);break;
                case 4: printlist(L);break;
                case 5: priorElem(L);break;
                case 6: nextElem(L);break;
                case 7: listinsert(L);break;
                case 8: deleteElem(L);break;
                default:printf("操作代码不在范围内");
            }
        }
    }

}

由于作者知识有限,若有不足恳请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值