线性表的顺序存储与操作

本文介绍了一种基于C语言实现的线性表操作方法,包括初始化、插入、删除等功能,并通过示例演示了如何合并两个有序线性表并去除重复元素的过程。

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

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

 

# defineTRUE 1

# defineERROR 0

# defineOK 1

# defineOVERFLOW

# defineFALSE 0

# defineLIST_INIT_SIZE 10

# defineLISTINCREMENT 5

 

typedefstruct{

       int *elem;

       int length;

       int listsize;

       }List;

 

voidInitList(List &L)

{

       L.elem=(int*)malloc (50*sizeof(int));

       L.length=0;

       L.listsize=50;

}

 

voidListInsert(List &L, int i, int e)

{

       int *q=&(L.elem[i-1]);

       for(int*p=&(L.elem[L.length-1]);p>=q;p--)

       *(p+1)=*p;

       *q=e;

       L.length++;

}

 

voidListDelete(List &L, int i)

{

       int *q=L.elem+i-1;

       for(int *p=L.elem+L.length-1;p>=q;q++)

       *q=*(q+1);

       L.length--;

}

voidMergeList(List la,List lb,List &lc)

{

       InitList(lc);

       int ai=0,bj=0,k=0;

       lc.listsize=la.listsize+lb.listsize;

       while(ai<=la.length-1&&bj<=lb.length-1)

       {

              if(la.elem[ai]<=lb.elem[bj])

              {

                     lc.elem[k]=la.elem[ai];ai++;k++;

                     lc.length++;

              }

              else

              {

                     lc.elem[k]=lb.elem[bj];bj++;k++;

                     lc.length++;

              }

       }

       if(ai==la.length){

              while(bj<=lb.length-1){

                     lc.elem[k]=lb.elem[bj];bj++;k++;

                     lc.length++;

              }

       }

       if(bj==lb.length){

              while(ai<=lb.length-1){

                     lc.elem[k]=lb.elem[ai];ai++;k++;

                     lc.length++;

              }

       }

}

voidListTraverse(List L,int printer)

{

       for(int i=1;i<=L.length;i++)

       {

       printer=L.elem[i-1];

       printf("%d ",printer);

       }

}

voidListDeleteII(List &lc)

{

       for(int i=0;i<lc.length;i++)

         for(int j=i+1;j<lc.length;j++)

         if(lc.elem[i]==lc.elem[j])

         ListDelete(lc,j+1);

      

}

int main()

 {

   List La,Lb,Lc;

   int j,b[7]={2,6,8,9,11,15,20},printer;

   InitList(La); // 创建空表La。如不成功,则会退出程序的运行

   for(j=1;j<=5;j++) // 在表La中插入5个元素,依次为1、2、3、4、5

     ListInsert(La,j,j);

   printf("La= ");

   ListTraverse(La,printer); // 输出表La的内容

   printf("\n");

   InitList(Lb); // 创建空表Lb

   for(j=1;j<=5;j++) // 在表Lb中插入5个元素,依次为2、4、6、8、10

     ListInsert(Lb,j,2*j);

   printf("Lb= ");

   ListTraverse(Lb,printer); // 输出表Lb的内容

   printf("\n");

   MergeList(La,Lb,Lc); // 调用算法2.2,生成新表Lc(不改变表La和表Lb)

   printf("Lc= ");

   ListTraverse(Lc,printer); // 输出表Lc的内容

   printf("\n");

   ListDeleteII(Lc); //删除LC中重复元素

   printf("Lc= ");

   ListTraverse(Lc,printer); // 输出表Lc的内容

   return 0;

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值