题目 顺序表操作
头文件head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 8
typedef int datatype;
typedef struct
{
int len;
datatype data[MAXSIZE];
}Seqlist;
Seqlist *create_list();//创建顺序表
datatype insert_rear(datatype e,Seqlist *list);//尾插
datatype full_list(Seqlist *list);//判满
datatype space_list(Seqlist *list);//判空
void Output(Seqlist *list);//输出顺序表
datatype delete_rear(Seqlist *list);//尾删
datatype search_by_sub(int sub,Seqlist *list);//下标查找
datatype insert_sub(int sub,Seqlist *list,int num);//下标插入
datatype change_sub(int sub,Seqlist *list,int num);//下标修改
datatype delete_sub(int sub,Seqlist *list);//下标删除
datatype search_by_num(int num,Seqlist *list);//元素查找
datatype insert_by_key(int key,int num,Seqlist *list);//元素插入
datatype change_by_key(int key,int num,Seqlist *list);//元素修改
datatype delete_by_key(int key,Seqlist *list);//元素删除
#endif
自定义函数text.c
#include "head.h"
Seqlist *create_list()
{
Seqlist *list=(Seqlist *)malloc(sizeof(Seqlist));
if(list==NULL)
{
return NULL;
}
list->len=0;
memset(list->data,0,sizeof(datatype)*MAXSIZE);
return list;
}
datatype full_list(Seqlist *list)
{
return (list->len==MAXSIZE)?-1:0;
}
datatype space_list(Seqlist *list)
{
return (list->len==0)?-1:0;
}
datatype insert_rear(datatype e,Seqlist *list)
{
if(NULL==list || full_list(list))
{
printf("insert rear error\n");
return -1;
}
list->data[list->len]=e;
list->len++;
return 0;
}
void Output(Seqlist *list)
{
if(NULL==list || space_list(list))
{
printf("output error\n");
return;
}
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->data[i]);
}
printf("\n");
}
datatype delete_rear(Seqlist *list)
{
if(NULL==list || space_list(list))
{
printf("delete error\n");
return -1;
}
printf("删除的元素是:%d\n",list->data[list->len-1]);
list->len--;
return 0;
}
datatype search_by_sub(int sub,Seqlist *list)
{
if(NULL==list || space_list(list) || sub<0 || sub>=list->len)
{
printf("search error\n");
return -1;
}
return list->data[sub];
}
datatype insert_sub(int sub,Seqlist *list,int num)
{
if(NULL==list || full_list(list) || sub<0 || sub>=list->len)
{
printf("insert_sub error\n");
return -1;
}
list->len++;
for(int i=list->len;i>sub;i--)
{
list->data[i]=list->data[i-1];
}
list->data[sub]=num;
return 0;
}
datatype change_sub(int sub,Seqlist *list,int num)
{
if(NULL==list || sub<0 || sub>=list->len)
{
printf("change error\n");
return -1;
}
list->data[sub]=num;
return 0;
}
datatype delete_sub(int sub,Seqlist *list)
{
if(NULL==list || space_list(list) || sub<0 || sub>=list->len)
{
printf("delete_sub error\n");
return -1;
}
for(int i=sub;i<list->len-1;i++)
{
list->data[i]=list->data[i+1];
}
list->len--;
return 0;
}
datatype search_by_num(int num,Seqlist *list)
{
if(NULL==list || space_list(list))
{
return -1;
}
for(int i=0;i<list->len;i++)
{
if(list->data[i]==num)
{
return i;
}
}
return -1;
}
datatype insert_by_key(int key,int num,Seqlist *list)
{
datatype sub=search_by_num(key,list);
if(sub==-1)
return -1;
else
return insert_sub(sub,list,num);
}
datatype delete_by_key(int key,Seqlist *list)
{
datatype sub=search_by_num(key,list);
if(sub==-1)
return -1;
else
return delete_sub(sub,list);
}
datatype change_by_key(int key,int num,Seqlist *list)
{
datatype sub=search_by_num(key,list);
if(sub==-1)
return -1;
else
return change_sub(sub,list,num);
}
主函数main.c
#include "head.h"
int main(int argc, const char *argv[])
{
Seqlist *list=create_list();
int n;
printf("please enter n:");
scanf("%d",&n);
datatype e;
//尾插
for(int i=0;i<n;i++)
{
printf("please enter element:");
scanf("%d",&e);
insert_rear(e,list);
}
Output(list);
//尾删
delete_rear(list);
Output(list);
//下标查找
int sub;
printf("please enter sub:");
scanf("%d",&sub);
e=search_by_sub(sub,list);
if(e!=-1)
{
printf("ele:%d\n",e);
}
//下标插入
printf("please enter sub:");
scanf("%d",&sub);
int num;
printf("please enter num:");
scanf("%d",&num);
e=insert_sub(sub,list,num);
if(e!=-1)
{
Output(list);
}
//下标修改
printf("please enter sub:");
scanf("%d",&sub);
printf("please enter num:");
scanf("%d",&num);
e=change_sub(sub,list,num);
if(e!=-1)
{
Output(list);
}
//下标删除
printf("please enter sub:");
scanf("%d",&sub);
e=delete_sub(sub,list);
if(e!=-1)
{
Output(list);
}
//元素查找
printf("please enter search_num:");
scanf("%d",&num);
e=search_by_num(num,list);
if(e!=-1)
{
printf("首次出现在%d位\n",e);
}
else
{
printf("search_by_num error\n");
}
//元素插入
int key,num;
printf("please enter insert_key:");
scanf("%d",&key);
printf("please enter num:");
scanf("%d",&num);
e=insert_by_key(key,num,list);
if(e!=-1)
Output(list);
//元素删除
printf("please enter delete_key:");
scanf("%d",&key);
e=delete_by_key(key,list);
if(e!=-1)
Output(list);
//元素修改
printf("please enter change_key:");
scanf("%d",&key);
printf("please enter change_num:");
scanf("%d",&num);
e=change_by_key(key,num,list);
if(e!=-1)
Output(list);
return 0;
}
运行图
思维导图