实现顺序表功能
1.实现尾插法
2.实现尾删法
3.实现顺序表查找
4.实现按下标插入
5.实现按下标修改
6.实现按下标删除
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct Sqlist
{
int len;//顺序表长度
int data[MAXSIZE];//数据元素
}sqlist;
sqlist * create();
int full_sqlist(sqlist *list);
int insert_rear(sqlist *list,int element);
int emty_sqlist(sqlist *list);
int output(sqlist *list);
int delete_rear(sqlist *list);
int found(sqlist *list,int sub);
int rev(sqlist *list,int sub,int element);
int insert(sqlist *list,int sub,int element);
int rm(sqlist *list,int sub);
#endif
test.c
#include "head.h"
sqlist * create()
{
sqlist *list=(sqlist *)malloc(sizeof(sqlist));
if(NULL==list)
{
return NULL;
}
memset(list->data,0,sizeof(list->data));//对数据清零
list->len=0;//长度清零
return list;
}
int full_sqlist(sqlist *list)
{
return list->len==MAXSIZE?-1:0;
}
int insert_rear(sqlist *list,int element)
{
if(NULL==list || full_sqlist(list))
{
puts("ERROR");
return -1;
}
list->data[list->len]=element;
list->len++;
return 0;
}
int emty_sqlist(sqlist *list)
{
return list->len==0?-1:0;
}
int output(sqlist *list)
{
if(NULL==list||emty_sqlist(list))
{
puts("为空");
return -1;
}
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->data[i]);
}
printf("\n");
return 0;
}
int delete_rear(sqlist *list)
{
if(NULL==list||emty_sqlist(list))
{
puts(" delete error");
return -1;
}
list->len--;
return 0;
}
int found(sqlist *list,int sub)
{
if(NULL==list||emty_sqlist(list)||sub<0||sub>=list->len)
{
puts("查找失败");
return -1;
}
printf("search element:%d\n",list->data[sub]);
return 0;
}
int rev(sqlist *list,int sub,int element)
{
if(NULL==list||emty_sqlist(list)||sub<0||sub>=list->len)
{
puts("修改错误");
return -1;
}
list->data[sub]=element;
return 0;
}
int insert(sqlist *list,int sub,int element)
{
if(NULL==list||full_sqlist(list)||sub<0||sub>list->len)
{
puts("插入位置错误");
return -1;
}
for(int i=list->len-1;i>=sub;i--)
{
list->data[i+1]=list->data[i];
}
list->data[sub]=element;
list->len++;
return 0;
}
int rm(sqlist *list,int sub)
{
if(NULL==list||emty_sqlist(list)||sub<0||sub>=list->len)
{
puts("删除位置错误");
return -1;
}
for(int i=sub;i<list->len-1;i++)
{
list->data[i]=list->data[i+1];
}
list->len--;
return 0;
}
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
sqlist* list=create();
int n;
int element;
printf("please input n:\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("please input %d element:\n",i+1);
scanf("%d",&element);
insert_rear(list,element);
}
printf("output sqlist:\n");
output(list);
delete_rear(list);
printf("after delete :\n");
output(list);
int sub;
printf("输入查找的下标:\n");
scanf("%d",&sub);
found(list,sub);
printf("输入要修改的元素下标:\n");
scanf("%d",&sub);
puts("输入要修改的值:");
scanf("%d",&element);
rev(list,sub,element);
output(list);
puts("输入要插入的下标:");
scanf("%d",&sub);
puts("输入要插入的值:");
scanf("%d",&element);
insert(list,sub,element);
output(list);
puts("输入要删除的下标:");
scanf("%d",&sub);
rm(list,sub);
output(list);
return 0;
}