C语言实现线性表详解(完整代码有详细注释)

#include <stdio.h>
#include <stdlib.h>
#define  MAXSIZE 100//线性表的最大长度 

typedef struct 
{
    int *elem;
    int  length;//线性表的当前长度 
    //int   maxlength;//线性表的最大长度 
}SqList;

SqList q;
int i,k;

//初始化函数

void initSqList(SqList& l)
{
    l.elem=(int*)malloc(sizeof(int)*MAXSIZE);
    l.length=0; 
    
    printf("请输入你要插入线性表的元素个数:");
    int n;
    scanf("%d\n",&n);
    while(n<=0||n>MAXSIZE)
    {
        printf("元素个数不符合线性表的要求请重新输入:");
        scanf("%d\n",&n); 
     } 
     for(int i=0;i<n;i++)
    {
        scanf("%d",&l.elem[i]);
        l.length++;
    } 
} 

void printSqList(SqList& l)
{
    for(int i=0;i<l.length;i++)
    {
        
        printf("%d ",l.elem[i]);
    }
    printf("\n");
    
}


//查找函数 
void getelem(SqList& l,int i,int& e)
{
       e=l.elem[i-1];
}

//插入函数 
void insertSqList(SqList& l,int i,int e)
{
    for(int j=l.length-1;j>=i-1;j--)
    {
        l.elem[j+1]=l.elem[j];
    }
    l.elem[i-1]=e;
    l.length++;    
    
}

//删除函数 
void deleteSqList(SqList& l,int i)
{
    for(int j=i;j<l.length;j++)
    {
        l.elem[j-1]=l.elem[j];
    }
    l.length--;
}


//判断表是否为空
int listempty(SqList& l)
{
    if(l.length==0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
 } 


void a()
{
    printf("输入你要查找的元素的位置:"); 
    int i,k;
    scanf("%d",&i);
    while(i>q.length||i<=0)
    {
        
        printf("你输入的位置不合法请重新输入:");
        scanf("%d",&i);
    }
    getelem(q,i,k);
    printf("%d\n",k);
}

void b()
{
    printf("输入你要插入的位置:");
    scanf("%d",&i);
    while(i>q.length+1||i<=0)
    {
        printf("你输入的位置不合法请重新输入:");
            scanf("%d",&i);
    } 
    printf("输入你要插入的元素:");
    scanf("%d",&k);
    insertSqList(q,i,k);
    printSqList(q);
}


void c()
{
    printf("请输入你要删除的元素的位置:"); 
    scanf("%d",&i);
    while(i<=0||i>q.length)
    {
        printf("你输入的位置不合法请重新输入:");
        scanf("%d",&i);
    } 
    deleteSqList(q,i);
    printSqList(q);
}


void d()
{
        if(listempty(q))
    {
        printf("false\n");
    }
    else
    {
        printf("true\n");
    }
}


int main()
{
    initSqList(q);
    
    while(1)
    {
        printf("\n");
        printf("1查找\n");
        printf("2显示线性表元素\n");
        printf("3插入元素\n");
        printf("4删除元素\n");
        printf("5判断线性表是否为空\n");
        printf("选择功能序号:");
        int t;
        scanf("%d",&t);
        switch(t)
        {
            case 1:a();break;
            case 2:printSqList(q);break;
            case 3:b();break;
            case 4:c();break;
            case 5:d();break;
         } 
        
    }        
    return 0;
 } 

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值