顺序表:
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:本文不具有权威性,仅为个人学习笔记或有感而发,如有错误欢迎指正。