⽤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();
sqlink insert_by_pos(sqlink sq,T dt,int index);
void traval(sqlink sq);(也就是将顺序表中的数据打印出来的函数)
void destroy_sqlist(sqlink sq);//5销毁链表
sqlink insert_by_tail(sqlink sq,T dt);
T search_by_pos(sqlink sq,int index);
T search_by_value(sqlink sq,T dt);
void delete_by_pos(sqlink sq,int index);
void delect_by_value(sqlink sq,T dt);
sqlink change_by_pos(sqlink sq,T dt,int index);
sqlink change_by_value(sqlink sq,T dt1,T dt);,把相同的改了
#endif
下⾯的是功能函数
sqlist.c
#include<stdio.h>
#include “sqlist.h”
#include<stdlib.h>
sqlink create_sqlist()
{
sqlink sq=(sqlink)malloc(sizeof(sqlist));//sq为结构体类型指针⽤来存结构体结构体
if(sq)//如果分配成功
{
sq->size=0; //初始化元素的个数为0
}
return sq;
}
(思路是将数组的元素往后移动,从后往前移动)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;
}
(将结构体⾥⾯的数组存储的数据打印出来)
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");
}
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);
}
}
(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;
}
}
(将相同的数据出来)
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;
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");
}
}
(删除所有与要删除数字相同的数字)
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
{c语言listinsert函数
printf(“sq is null\n”);
}
}
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;
}
,把相同的改了
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<stdio.h>
#include “sqlist.h”
int main()
{
sqlink sq =create_sqlist();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。