用C语言来创建一个顺序表(数据结构部分)

顺序表的创建需要用到结构体,构造一个结构体来存储数据,顺序表申请的内存是连续的。创建顺序表的思路按照数据的“增删改查来进行编写”下列是顺序表的创建代码

创建头文件:
sqlist.h

#ifndef SQLIST_H
#define SQLIST_H

#define N 100

#define ming 1119
#define shu 1120

typedef int T;

typedef struct sqlist{
T data[N];//定义一个整形数组来存储数据
int size;//定义一个变量来记录数据的个数

}sqlist,*sqlink;

sqlink create_sqlist();//1.创建顺序表
sqlink insert_by_pos(sqlink sq,T dt,int index);//2.在任意位置插入
void traval(sqlink sq);//3.遍历函数(也就是将顺序表中的数据打印出来的函数)
void destroy_sqlist(sqlink sq);//5销毁链表
sqlink insert_by_tail(sqlink sq,T dt);//4.在尾部插入
T search_by_pos(sqlink sq,int index);//7.按位置查找
T search_by_value(sqlink sq,T dt);//8.按数值查找
void delete_by_pos(sqlink sq,int index);//9.按位置删除
void delect_by_value(sqlink sq,T dt);//10.按数值删除
sqlink change_by_pos(sqlink sq,T dt,int index);//11.按位置修改
sqlink change_by_value(sqlink sq,T dt1,T dt);//12.按数值修改,把相同的改了

#endif

下面的是功能函数
sqlist.c

#include
#include “sqlist.h”
#include

//1.创建顺序表
sqlink create_sqlist()
{
sqlink sq=(sqlink)malloc(sizeof(sqlist));//sq为结构体类型指针用来存结构体结构体
if(sq)//如果分配成功
{
sq->size=0; //初始化元素的个数为0
}
return sq;

}

//2.在任意位置插入(思路是将数组的元素往后移动,从后往前移动)
sqlink insert_by_pos(sqlink sq,T dt,int index)
{
int i=0;
if(sq)//判断顺序表是否存在,存在则进行操作
{

	if(index<0||index>sq->size)//非法插入位置,不插入
	{	
		printf("index is out of the range\n");
	}
	else
	{
		for(i=sq->size;i>index;i--)
		{
			sq->data[i]=sq->data[i-1];	
		}
		sq->data[index]=dt;
		(sq->size)++;	//插入一个数之后个数要加一			
	}
}
else//顺序表不存在就会打印sq为空
{
	printf("sq is null\n");
}

return sq;

}

//3.遍历函数(将结构体里面的数组存储的数据打印出来)
void traval(sqlink sq)

{
int i=0;
if(sq)
{
for(i=0;isize;i++)
printf("%d “,sq->data[i]);
}
else
{
printf(“sq is null\n”);
}
printf(”\n");
}

//4.在尾部插入
sqlink insert_by_tail(sqlink sq,T dt)
{
if(sq)
{
sq->data[(sq->size)++]=dt;
}

else
{
	printf("sq is null\n");
}
return sq;

}

//5销毁链表
void destroy_sqlist(sqlink sq)
{
if(sq)
{
free(sq);
}

}

//7.按位置查找(index是数组的下标,size则是个数,所以index的范围是0~size-1,index大于size-1和小于零的数是不存在的,也就是非法位置)
T search_by_pos(sqlink sq,int index)
{
if(sq)
{
if(index<0||index>sq->size-1)
{
printf(“index is out of the range\n”);
return -ming;
}
else{
return sq->data[index];
}
}

else
{
	printf("sq is null\n");
	return -shu;
}

}

//8.按数值查找(将相同的数据找出来)
T search_by_value(sqlink sq,T dt)
{
int i=0;
if(sq)
{
for(i=0;isize;i++)
{
while(sq->data[i]==dt)
{
printf(“i=%d “,i);
break;
}
}
printf(”\n”);
}

else
{
	printf("sq is null\n");
	return -shu;
}
return ming;

}

//9.按位置删除
void delete_by_pos(sqlink sq,int index)
{
int i=0;
if(sq)
{
for(i=index;isize;i++)
{
sq->data[i]=sq->data[i+1];
}
(sq->size)–;//删除之后个数要减去1
}

else
{
	printf("sq is null\n");
	
}

}

//10.按数值删除(删除所有与要删除数字相同的数字)
void delect_by_value(sqlink sq,T dt)
{
int i=0;
if(sq)
{
for(i=0;isize;i++)
{
while(sq->data[i]==dt)
{
printf("i=%d ",i);
delete_by_pos(sq,i);//查找到数据之后把位置记录下来,按位置进行
break;
}
}
}
else
{
printf(“sq is null\n”);

}

}

//11.按位置修改
sqlink change_by_pos(sqlink sq,T dt,int index)
{
if(sq)
{
if(index<0||index>sq->size-1)
{
printf(“index is out of range\n”);

	}
	else
	{
		sq->data[index]=dt;
	}	
}
else
{
	printf("sq is null\n");
	
}
return sq;

}

//12.按数值修改,把相同的改了
sqlink change_by_value(sqlink sq,T dt1,T dt)
{
int i=0;
if(sq)
{
for(i=0;isize;i++)
{
while(sq->data[i]==dt)
{
sq->data[i]=dt1;
break;
}
}
}

else
{
	printf("sq is null\n");
	
}

}

主函数
main.c

#include
#include “sqlist.h”

int main()
{
sqlink sq =create_sqlist();

insert_by_pos(sq,1,0);
insert_by_pos(sq,2,0);
insert_by_pos(sq,3,0);
insert_by_pos(sq,4,0);

insert_by_tail(sq,2);		
insert_by_tail(sq,3);
insert_by_tail(sq,4);

traval(sq);

//printf("data=%d",search_by_pos(sq,2));
//search_by_value(sq,4);
//delete_by_pos(sq,0);
//delect_by_value(sq,4);
//printf("\n");
//change_by_pos(sq,520,2);
change_by_value(sq,520,4);//把所有的4改成520
traval(sq);

destroy_sqlist(sq);
return 0;

}

主函数这里只是调用了一些函数的功能而已,下面给大家附上图片

用C语言来创建一个顺序表(数据结构部分)_第1张图片前面的1,2,3,4是用了头插()的方式,所以顺序是反的,后面的2,3,4是尾插法。

你可能感兴趣的:(用C语言来创建一个顺序表(数据结构部分))