首页 > 其他分享 >线性表

线性表

时间:2023-04-18 23:36:35浏览次数:23  
标签:insert return 线性表 int list pos sqlink

//sqlist/h
#ifndef _SQLIST_H_
#define _SQLIST_H_

typedef int data_t;
#define N 128

typedef struct{
    data_t data[N];
    int last;
}sqlist, *sqlink;

sqlink list_create();

int list_destroy(sqlink L);

int list_clear(sqlink L);

int list_empty(sqlink L);

int list_length(sqlink L);

int list_search(sqlink L, data_t value);

int list_insert(sqlink L, data_t value, int pos);

void list_show(sqlink L);

int list_delete(sqlink L, int pos);

int list_merge(sqlink L1, sqlink L2);

#endif
//sqlist.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlist.h"

sqlink list_create()
{
    sqlink L = (sqlink)malloc(sizeof(sqlist));
    if(L == NULL){
        printf("malloc failed\n");
        return NULL;
    }
    
    memset(L, 0, sizeof(sqlist));
    L->last = -1;
    
    return L;
}

int list_destroy(sqlink L)
{
    if(L == NULL){
        printf("this is NULL list,destroy failed\n");
        return -1;
    }
    
    free(L);
    L = NULL;
    
    return 0;
}

int list_clear(sqlink L)
{
    if(L == NULL){
        printf("this is NULL list,clear failed\n");
        return -1;
    }
    
    memset(L, 0, sizeof(sqlist));
    L->last = -1;
    
    return 0;
}

int list_empty(sqlink L)
{
    if(L == NULL)
        return -1;
    else    
        return 0;
}

int list_length(sqlink L)
{
    if(L == NULL){
        printf("this is NULL list,length failed\n");
        return -1;
    }
    
    return L->last+1;
}

int list_search(sqlink L, data_t value)
{
    for(int i = 0; i <= L->last; i++){
        if(L->data[i] == value){
            return i;
        }
    }
    return -1;
}

int list_insert(sqlink L, data_t value, int pos)
{
    int i = 0;
    if(L->last == N-1){
        printf("list is full,not insert!\n");
        return -1;
    }
    
    if(pos < 0 || pos >= N-1){
        printf("position not correct,not insert!\n");
        return -1;
    }
    
    //从最后一个开始移,移到想要的位置pos
    if(pos >= 0 && pos <= L->last){
        for(i = L->last; i >= pos; i--){
            L->data[i+1] = L->data[i];
        }
        L->data[pos] = value;    
        L->last++;
    }else if(pos > L->last && pos < N-1){
        L->data[pos] = value;
        L->last = pos;
    }
    
    return 0;
}

void list_show(sqlink L)
{
    if(L == NULL){
        printf("this is NULL list,show failed\n");
    }
    
    for(int i = 0; i <= L->last; i++){
        printf("%d\t",L->data[i]);
    }
    printf("\n");
    return ;
}

int list_delete(sqlink L, int pos)
{
    if(L->last == -1){
        printf("list is empty,not delete\n");
        return -1;
    }
    if(pos < 0 || pos > L->last){
        printf("pos is invalue\n");
        return -1;
    }
    if(pos == L->last){
        L->last--;
    }else if(pos < L->last){
        for(int i = pos; i <= L->last; i++){
            L->data[i] = L->data[i+1];    
        }
        L->last--;
    }
    return 0;
}

int list_merge(sqlink L1, sqlink L2){
    int i = 0;
    int ret;
    while(i <= L2->last){
        if(list_search(L1, L2->data[i]) == -1){
            list_insert(L1, L2->data[i], L1->last+1);
        }
        i++;
    }
    return 0;
}
//sqlist_test.c
#include <stdio.h>
#include "sqlist.h"

void test_insert()
{
    sqlink L = NULL;
    L = list_create();
    
    list_insert(L, 10, 10);    
    list_show(L);
    
    list_insert(L, 100, 5);    
    list_show(L);        
}

void test_delete()
{
    sqlink L = NULL;
    L = list_create();
    
    list_insert(L, 20, 0);    
    list_insert(L, 30, 1);    
    list_insert(L, 40, 5);
    list_insert(L, 90, 9);    
    list_insert(L, 100, 10);
    list_show(L);
    
    list_delete(L, 11);
    list_show(L);
}
void test_merge()
{
    sqlink L1 = NULL;
    L1 = list_create();
    
    list_insert(L1, 20, 0);    
    list_insert(L1, 30, 1);    
    list_insert(L1, 40, 5);
    list_insert(L1, 90, 9);    
    list_insert(L1, 100, 10);
    list_show(L1);
    
    sqlink L2 = NULL;
    L2 = list_create();
    
    list_insert(L2, 32, 0);    
    list_insert(L2, 30, 1);    
    list_insert(L2, 45, 5);
    list_insert(L2, 12, 9);    
    list_insert(L2, 100, 10);
    list_show(L2);
    
    list_merge(L1,L2);
    list_show(L1);
    list_show(L2);
}
int main()
{
    //test_insert();
    
    //test_delete();

    test_merge();
    

    return 0;
}

 

标签:insert,return,线性表,int,list,pos,sqlink
From: https://www.cnblogs.com/zj-studyrecoding/p/17331631.html

相关文章

  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 线性表之静态链表实现(数组cur实现)
    main.cpp#include"StaticList.h"intmain(){StaticListSL;InitSList(SL);for(inti=0;i<5;++i){Insert(SL,'A'+i);}ShowSList(SL);DeleteSList(SL);ShowSList(SL);return0;}Stati......
  • 线性表之单循环链表实现
    main.cpp#include"SCList.h"intmain(){Listmylist;InitList(mylist);intselect=1;ElemTypeItem;Node*p=NULL;while(select){printf("************************************\n");printf("......
  • 合并有序线性表
    一看就懂的合并有序线性表源码把合并后的线性表放到新创建的第三个线性表中两个表的长度可能会不一样,所以一个表比较完了,另一个表可能没比较完,但两个表中的每个元素肯定都互相比较了一次,所以小的元素已经全部放到了前边,没比较完的那个表直接加在新表的后面就行SqlistA=[1,2......
  • 线性表06
    06.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。算法思想:注意是有序顺序表,值相同的元素一定在连续的位置上,用类似于直接插入排序的思想,初始时将第一......
  • 线性表05
    05.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。算法思想:从前向后扫描顺序表L,用k记录下元素值在......
  • 线性表04
    04.从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。在很多教材中指的"有序",如无特别说明,通常是指“递增......
  • 线性表03
    03.对长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。解法1:用k记录顺序表L中不等于x的元素个数(即需要保存的......
  • 线性表02
    02.设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。算法思想:扫描顺序表L的前半部分元素,对于元素L.datai,将其与后半部分的对应元素L.data[L.lengt......
  • 02. 线性表
    一、什么是线性表  线性表(LinearList)是由同类型数据元素构成有序序列的线性结构。表中元素个数称为线性表的长度,线性表没有元素时,称为空表。表起始位置称为表头,......