【数据结构与算法】笔记三:顺序表

顺序表:

    1、静态分配

    2、动态分配

    3、插入

    4、查找、删除

    5、有序插入

废话不多说,直接上代码,均经过编译有效:

//*****************************************************************************************
//顺序表sqlist(sequencelist)
//静态分配
//*****************************************************************************************
#include <stdio.h>
#define MAXSIZE 10

typedef struct Sqlist
{
    int data[MAXSIZE];
    int length;
}Sqlist;

void InitList(Sqlist * L)//初始化顺序表
{
	int i=0;
    for( i=0; i<MAXSIZE; i++)
        L->data[i] = 0;
    L->length = 0;//顺序表初始长度为0
}

int main(void)
{
	int i=0;
    Sqlist L;
    InitList(&L);

    for( i=0;i<MAXSIZE;i++)//这里取用MAXSIZE是为了显示值,实际使用只看你赋值了几个,即length
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }
    return 0;
}

//*****************************************************************************************
//顺序表sqlist(sequencelist)
//动态分配
//*****************************************************************************************

#include <stdio.h>
#include <stdlib.h>

#define INITSIZE 10

typedef struct Sqlist
{
    int *data;
    int MAXSIZE;
    int length;
}Sqlist;

void InitList(Sqlist *L)//初始化顺序表
{
    L->data = (int *)malloc(INITSIZE *sizeof(int));
    L->length = 0;
    L->MAXSIZE = INITSIZE;
}

void IncreaseSize_malloc(Sqlist *L,int increlen)//这种需要将原数据转移,然后free原空间
{
    int *temp = L->data;
	int i=0;
    L->data = (int *)malloc((L->MAXSIZE + increlen)*sizeof(int));
    for(i=0; i<L->length; i++)
    {
        L->data[i] = temp[i];
    }
    L->MAXSIZE = L->MAXSIZE + increlen;
    free(temp);
}

int IncreaseSize_realloc(Sqlist *L,int increlen)//这种会在原有存储数据后增加新的连续空间,如果realloc没有,则返回NULL 
{
    L->data = (int *)realloc(L->data,(L->MAXSIZE + increlen)*sizeof(int));
    if(L->data == NULL)//为分配到连续空间是会返回NULL表示失败
    {
        printf("there no enough sequence memory to realloc \n");
        return -1;
    }
    L->MAXSIZE = L->MAXSIZE + increlen;
    return 0;
}

int main(void)
{
	int i=0;
    Sqlist L;
    InitList(&L);

	for( i=0;i<L.MAXSIZE;i++)//这里取用MAXSIZE是为了显示值,实际使用只看你赋值了几个,即length
    {
        L.data[i] = i;
		L.length++;
    }
	printf("adress = %x,MAXISZE = %d \n",&L,L.MAXSIZE);
	for( i=0;i<L.MAXSIZE;i++)//这里取用MAXSIZE是为了显示值,实际使用只看你赋值了几个,即length
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }


	IncreaseSize_malloc(&L,3);
	printf("adress = %x,MAXISZE = %d \n",&L,L.MAXSIZE);
    for( i=0;i<L.MAXSIZE;i++)//这里取用MAXSIZE是为了显示值,实际使用只看你赋值了几个,即length
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

	IncreaseSize_realloc(&L,2);
	printf("adress = %x,MAXISZE = %d \n",&L,L.MAXSIZE);
    for( i=0;i<L.MAXSIZE;i++)//这里取用MAXSIZE是为了显示值,实际使用只看你赋值了几个,即length
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

    return 0;
}
//*****************************************************************************************
//顺序表sqlist(sequencelist)
//插入
//*****************************************************************************************


#include <stdio.h>
#define MAXSIZE 10

typedef struct Sqlist
{
    int data[MAXSIZE];
    int length;
}Sqlist;

void InitList(Sqlist * L)//初始化顺序表
{
	int i=0;
    for( i=0; i<MAXSIZE; i++)
        L->data[i] = 0;
    L->length = 0;//顺序表初始长度为0
}

int Addnode(Sqlist *L,int num,int data)
{
    int i;
	if(num <1 || num >L->length+1 || num >=MAXSIZE)//判断输入的合法性
	{
		printf("illegal input\n");
		return -1;
	}
    else
    {
        for( i=L->length;i>=num;i--)
        {
            L->data[i] = L->data[i-1];
        }
        L->data[i] = data;
    }
	L->length++;
	return 1;
}


int main(void)
{
	int i=0;
    Sqlist L;
    InitList(&L);

	for( i=0;i<5;i++)
    {
        L.data[i] = i;
		L.length++;
    }
	printf("adress = %x,length = %d \n",&L,L.length);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

	printf("********************************************\n");
	Addnode(&L,7,9);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }
}
//*****************************************************************************************
//顺序表sqlist(sequencelist)
//查找、删除
//*****************************************************************************************

#include <stdio.h>
#define MAXSIZE 10

typedef struct Sqlist
{
    int data[MAXSIZE];
    int length;
}Sqlist;

void InitList(Sqlist * L)//初始化顺序表
{
	int i=0;
    for( i=0; i<MAXSIZE; i++)
        L->data[i] = 0;
    L->length = 0;//顺序表初始长度为0
}

int DelNodeData(Sqlist *L,int data)//删除指定数据
{
    int i,j;	
    if(L->length == 0)
    {
        printf("L is empty \n");
        return -1;
    }
    for(i=0; i<L->length; i++)
    {
        if(data == L->data[i])
        {  
            for(j=i; j<=L->length-1; j++)
            {
                L->data[j] = L->data[j+1];
            }
			
            L->length--;
            return 1;
        }
    }
	printf("no find %d in the list \n",data);
	return 1;
}

int DelNodeNum(Sqlist *L,int num)//删除指定序号的数据
{
    int i;
    if(L->length == 0)
    {
        printf("L is empty \n");
        return -1;
    }
	if(num<1 || num>L->length-1 || num>=MAXSIZE)
	{
		printf("illgal num \n");
		return -1;
	}

    for(i=num-1;i < L->length-1;i++)
    {
        L->data[i] = L->data[i+1];
    }
    L->length--;
    return 1;

}




int main(void)
{
	int i=0;
    Sqlist L;
    InitList(&L);

	for( i=0;i<5;i++)//简单初始化一些数据
    {
        L.data[i] = i*2;
		L.length++;
    }
	printf("adress = %x,length = %d \n",&L,L.length);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

	printf("********************************************\n");
	DelNodeData(&L,6);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

    printf("********************************************\n");
	DelNodeNum(&L,2);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }
}
//*****************************************************************************************
//顺序表sqlist(sequencelist)
//有序插入
//*****************************************************************************************

#include <stdio.h>
#define MAXSIZE 10

typedef struct Sqlist
{
    int data[MAXSIZE];
    int length;
}Sqlist;

void InitList(Sqlist * L)//初始化顺序表
{
	int i=0;
    for( i=0; i<MAXSIZE; i++)
        L->data[i] = 0;
    L->length = 0;//顺序表初始长度为0
}

int AddNodeSeq(Sqlist *L,int data)//注意细节排序
{
    int i,j;
    if(L->length == 0)
    {
        L->data[0] = data;
        L->length++;
        return -1;
    }
    for(i=0;i<L->length;i++)
    {
        if(data < L->data[i])
        {
            for(j=L->length;j>i;j--)
            {
                L->data[j] = L->data[j-1];
            }
            L->data[j] = data;
			L->length++;
			return 1;
        }

    }
	L->data[L->length] = data;
	L->length++;
    return 1;
}

int BubbleAddNode(Sqlist *L,int data)//冒泡排序,省事,占用性能
{
    int i,j;
    int temp;
    L->data[L->length] = data;
    L->length++;
    for(i=0;i<L->length-1;i++)
    {
        for(j=0;j<L->length-1-i;j++)
        {
            if(L->data[j] > L->data[j+1])
            {
                temp = L->data[j];
                L->data[j] = L->data[j+1];
                L->data[j+1] = temp;
            }
        }
    }
}


int main(void)
{
	int i=0;
    Sqlist L;
    InitList(&L);

	for( i=0;i<8;i++)
    {
        L.data[i] = i*2;
		L.length++;
    }
	printf("adress = %x,length = %d \n",&L,L.length);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

	printf("********************************************\n");
	AddNodeSeq(&L,5);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }

    printf("********************************************\n");
	BubbleAddNode(&L,7);
	for( i=0;i<L.length;i++)
    {
        printf("data[%d] = %d \n",i,L.data[i]);
    }
}

PS:本文不具有权威性,仅为个人学习笔记或有感而发,如有错误欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值