test.c
#include "head.h"
//顺序表在堆区申请空间,成功返回堆区的首地址,否则返回NULL
Seqlist *CreateSpce()
{
Seqlist *s=(Seqlist *)malloc(sizeof(Seqlist));
if(s==NULL)
return NULL;
s->len=0;//表示顺序表数据元素的个数为0,顺序表空
return s;
}
//判断顺序表满成立返回-1 失败返回0
void SeqlistFull(Seqlist *s)
{
if(s->len==MAXSIZE)
return -1;
return 0;
}
//在表尾插入
void InsertByRear(Seqlist *s,datatype e)
{
if(SeqlistFull(s))//判断是否为满
return;
s->data[s->len++]=e;//e存储到表尾,顺序表长度自增
}
//遍历顺序表
void SeqlistOutput(Seqlist *s)
{
for(int i;i<s->len;i++)
{
printf("%d\t",s->data[i]);
}
}
//判断顺序为空
//空返回-1 非空返回0
int SeqlistEmpty(Seqlist *s)
{
if(s->len==0)
return -1;
return 0;
}
//顺序表删除表尾元素
void SeqlistDeleteByRear(Seqlist *s)
{
if(SeqlistEmpty(s))
{
return -1;
}
s->len--;
}
//查找成功输出查找的数据元素,失败结束
void SeqlistSearch(Seqlist *s,int sub)
{
//1.判断数据表是否为空
//2.判断下表是否合法
if(SeqlistEmpty(s)||sub<0||sub>=s->len)
{
printf("查找失败!!\n");
return;
}
//3.直接输出下标对应的值
printf("查找到的元素是:%d\n",s->data[sub]);
}
//按下标修改
//无返函数
void SeqlistUpdate(Seqlist *s,int sub1,int e1)
{
{
//1.判断数据表是否为空
//2.判断下表是否合法
if(SeqlistEmpty(s)||sub<0||sub>=s->len)
{
printf("修改失败!!\n");
return;
}
s->data[sub1]=e1;
SeqlistOutput(s);
}
//按下标插入
//无返函数
void SeqlistInsertBySub(Seqlist *s,int sub,int e)
{
//1.判断数据表是否为空
//2.判断下表是否合法
if(SeqlistEmpty(s)||sub<0||sub>=s->len)
{
printf("插入失败!!\n");
return;
}
//3.循环后移
for(int i=s->len-1;i>=sub;i--)
{
s->data[i+1]=s->data[i];
}
//在sub插入
s->data[sub]=e;
s->len++;
SeqlistOutput(s);
}
//按下标删除
void SeqlistDeleteBySub(Seqlist *s,int sub)
{
if(SeqlistEmpty(s)||sub<0||sub>=s->len)
{
printf("删除失败!!!\n");
return;
}
for(int i=sub;i<s->len-1;i++)
{
s->data[i]=s->data[i+1];
}
s->len--;
SeqlistOutput(s);
}
//按元素查找
//返回下标
int SeqlistSearchBydata(Seqlist *s,int key)
{
if(SeqlistEmpty(s))
return -1;
for(int i=0;i<s->len;i++)
{
if(s->data[i]==key)
return i;
}
return -1;
}
//按元素修改
void seqlistUpdateBydata(Seqlist *s,int key,datatype e)
{
int sub=SeqlistSearchBydata(s,key);
if(sub==-1)
{
printf("要修改的元素不存在!");
return;
}
else
s->data[sub]=e;
SeqlistOutput(s);
}
//按元素删除
void SeqlistDeleteBydata(Seqlist *s,int key)
{
int sub=SeqlistSearchBydata(s,key);
if(sub==-1)
printf("修改失败!!!");
for(int i=sub;i<s->len-1;i++)
{
s-data[i]=s->data[i+1];
}
s->len--;
SeqlistOutput(s);
}
//顺序表去重
void SearchDeleteBysub1(Seqlist *s,int sub)
{
if(SeqlistEmpty(s)||sub<0||sub>=s->len)
{
return;
}
for(int i=sub;i<s->len-1++)
{
s->data[i]=s->data[i+1];
}
s-len--;
}
void SeqlistDeteleRep(Seqlist *s)
{
for(int i=0;i<s->len;i++)
{
for(int j=i+1;j<s->len;j++)
{
if(s->data[i]==s->data[j])
{
SeqlistDeleteBysub1(s,j);
printf("\n");
s->len--;
j--;
}
}
}
SeqlistOutput(s);
}
//顺序标排序
void SeqlistBubble(Seqlist *s)
{
int i,j;
datatype temp;
for(i=1;i<s->len;i++)
{
int count==0;
for(j=0;i<s-len-i;j++)
{
if(s->data[j]>s->data[j+1])
{
temp=s->data[j];
s->data[j]=s->data[j+1];
s->data[j+1]=temp;
count++;
}
}
if(count==0)
break;
}
SeqlistOutput(s);
}
//顺序表合并
void SeqlistCombin(Seqlist *s1,Seqlist *s2,Seqlist *s3)
{
int i=0;
int j=0;
while(i<s1->len&&j<s2->len&&s3->len<MAXSIZE)
{
if(s1->data[i]<=s2->data[j])
s3->data[s3->len++]=s1->data[i++];
else
s3->data[s3->len++]=s2->data[j++];
}
//存储剩余s1的元素
while(i<s1->len&&s3->len<MAXSIZE)
{
s3->data[s3->len++]=s1->data[i++];
}
//存储剩余s2 的元素
while(j<s2->len&&s3->len<MAXSIZE)
{
s3->data[s3->len++]=s3->data[j++];
}
SeqlistOutput(s);
}
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
//顺序表创建
Seqlist *s=CreateSpce();
if(s=NULL)
return 0;
//==========顺序表在表位插入================
int n;
datatype e;
printf("输入插入元素的个数:");
scanf("%d",&n);
if(n>MAXSIZE)//判断数据的个数是否大于线性表的长度,大于则结束函数
return 0;
for(int i;i<n;i++)
{
scanf("%d",&e);
InsertByRear(s,e);//循环在表尾插入元素
}
//==========顺序表遍历======================
SeqlistOutput(s);
//==========顺序表删除表尾=================
SeqlistDeleteByRear(s);
printf("删除表尾元素\n");
SeqlistOutput(s);
//==========顺序表按下标查找===============
int sub;
printf("输入查找的下标:");
scanf("%d",&sub);
SeqlistSearch(s,sub);
//==========顺序表按下标修改==============
int sub1;
printf("输入要修改的下标:");
scanf("%d",&sun1);
int e1;
printf("输入修改为:");
scanf("%d",&e1);
SeqlistUpdate(s,sub1,e1);
//==========顺序表按下标插入==============
int sub2;
printf("输入要插入的下标:");
scanf("%d",&sub2);
int e3;
printf("输入要插入的值:");
scanf("%d",&e2);
SeqlisInsertBySub(s,sub2,e2);
//==========顺序表按下标删除==============
int sub3;
printf("输入删除的下标:");
scanf("%d"&sub3);
SeqlistDeleteBySub(s,sub3);
//==========顺序表按元素查找===============
int key;
printf("输入要查找的元素:");
scanf("%d",&key);
int sub01=SeqlistSearchBydata(s,key);
if(sub01==-1)
printf("查找失败!!!!\n");
else
printf("查找到元素的下标为%d\n",sub01);
//==========顺序表按元素修改==============
int key1;
printf("输入要修改的元素:");
scanf("%d",&key1);
datatype e01;
printf("输入修改为:");
scanf("%d",&e01);
SeqlistUpdateBydata(s,key1,e01);
//==========顺序表按元素删除===============
int key2;
printf("输入要删除的元素");
scanf("%d",&key2);
SeqlistDeleteBydata(s,key2);
//==========顺序表去重========================
SeqlistDeleteRep(s);
//==========顺序表排序=====================
seqlistBubbble(s);
//==========顺序表合并=====================
Seqlist s2={11,22,44,55};
Seqlist s3;
s3.len=0;
SeqlistCombin(s,&s2,&s3)
return 0;
}
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 20
typedef int datatype;
typedef struct
{
//数据元素
datatype data[MAXSIZE];
//顺序表长度
int len;
}Seqlist;
void InsertByRear(Seqlist *s,datatype e)
void SeqlistFull(Seqlist *s)
void SeqlistOutput(Seqlist *s)
int SeqlistEmpty(Seqlist *s)
void SeqlistDeleteByRear(Seqlist *s)
void SeqlistSearch(Seqlist *s,int sub)
void SeqlistInsertBySub(Seqlist *s,int sub,int e)
void SeqlistUpdate(Seqlist *s,int sub1,int e1)
void SeqlistDeleteBySub(Seqlist *s,int sub)
int SeqlistSearchBydata(Seqlist *s,int key)
void SeqlistUpdateBydata(Seqlist *s,int key,datatype e);
void SeqlistDeleteBydata(Seqlist *s,int key)
void SearchDeleteBysub1(Seqlist *s,int sub)
void SeqlistDeteleRep(Seqlist *s)
void SeqlistBulle(Seqlist *s);
void SeqlistCombin(Seqlist *s1,Seqlist *s2,Seqlist *s3)y
#endif
#endif