顺序表常见几种操作

杀马特。学长 韩版系。学妹 提交于 2019-12-02 15:13:36

顺序表常见几种操作:

 

 

#include"stdio.h"
#include"stdlib.h"
#include"time.h"

#define ture 100
#define false 101 
#define maxsize 20

 

 

typedef struct node
{
    int data[maxsize];
    int length;
}seqlist, *pseqlist;


pseqlist init_list()          //初始化顺序表,函数返回类型为pseqlist类型。 
{
    pseqlist p;
    p = (pseqlist)malloc(sizeof(seqlist));
    if(p)
        p->length = 0;
    return p;
    
}

int length_list(pseqlist p)           //求顺序表的长度 
{
    return (p->length);
}

 

/* 
顺序表的检索有两种方法,   1:通过给定的一个数,然后在顺序表里遍历去匹配,如果有,输出位置,没有,返回false
                           2:通过给定的位置,来返回对应位置的数值 

*/

int location_list(pseqlist p, int x)     // 参数:顺序表,要比对的数 
{
    int i;
    for(i = 0; i < p->length; i++)
    {
        if(p->data[i] == x)
        {
            return i+1;
        }
    }
    return false;
}

 

/*
顺序表,要插入元素的位置,以及要插入得元素 

*/

int insert_list(pseqlist p, int i, int number)     
{
    int j;
    if(p == NULL)
    {
        printf("表不存在\n");
        return false;
    }
    if(i < 1 || i > maxsize)
    {
        printf("插入的位置不合法\n");
        return false;
    } 
    if(p->length >= maxsize)
    {
        printf("表溢出\n");
        return false;
     } 
     
     for(j = p->length; j >= i; j--)
     {
         p->data[p->length] = p->data[p->length-1];
     }
     p->data[i-1] = number;
     p->length++;
     return ture; 
     
    
 } 

int delete_list(pseqlist p, int i)       //删除顺序表的某个元素 
{
    int j;
    if(p == NULL)
    {
        printf("表不存在\n");
        return false;
    }
    if(i < 1 || i > maxsize)
    {
        printf("删除的位置不合法\n");
        return false;
    } 
    for(j = i; j < p->length; j++ )
    {
        p->data[j-1] = p->data[j]; 
    }
    p->length--;
    return ture;
}


int clear_list(pseqlist p)     //清空顺序表 
{
    p->length = 0;
    return ture;
 } 


int destory_list(pseqlist p)     //销毁顺序表 
{
    if(p)
    {
        free(p);
    }
    if(p == NULL)
    {
        return ture;
    }
}


int main()
{
    pseqlist l;
    l = init_list();
    int num;
    
    srand(time(NULL));
    int i;
    
    for (i = 0; i < 10; i++)
    {
      num = rand()%11; 
      insert_list(l,i+1,num);
    }
   // printf("%d, ", rand()%11);
   
   for(i = 0; i < 10; i++)
   {
       printf("%d ",l->data[i]);
    } 
   
   int len;
   len = length_list(l);
   printf("\n顺序表长度为%d",len);
   
    return 0;
}

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!