头文件
#ifndef __1_H_
#define __1_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
typedef int dataint;
typedef struct node
{
dataint data[N];
int pos;
}Seq;
void show();
Seq * found();
void insert(Seq *list);
void insertx(Seq *list);
void clean(Seq *list);
void cleanxb(Seq *list);
void chage(Seq *list);
void chagexb(Seq *list);
void find(Seq *list);
void findxb(Seq *list);
void find1(Seq *list);
void show1(Seq *list);
void dedup(Seq *list);
#endif
主函数
#include "1.h"
int main(int argc, char const *argv[])
{
Seq *list = found();
list->pos = 0;
int a = 0;//功能选择
while(1)
{
show();
printf("请输入选择:");
scanf("%d", &a);
switch (a)
{
case 1:
//增加数据
insert(list);//尾部插入
//insertx(list);//下标插入
break;
case 2:
//删除数据
//clean(list);//按数据删除数据
cleanxb(list);//按下标删除数据
break;
case 3:
//修改数据
//chage(list);//按数据修改数据
chagexb(list);//按下标修改数据
break;
case 4:
//查找数据
//find(list);//按数据查找
//findxb(list);//按下标查找
find1(list);//查找下标
break;
case 5:
//遍历
show1(list);//遍历所有顺序表
//dedup(list);//删除重复顺序表
break;
case 0:
free(list);//释放堆空间
return 0;
default:
printf("输入有误,请重新输入!!!\n");
break;
}
}
return 0;
}
功能函数
#include "1.h"
//创建顺序表
Seq * found()
{
Seq *list = malloc(sizeof(Seq));
memset(list, 0, sizeof(Seq));
return list;
}
//显示
void show()
{
printf("*******1、添加数据*******\n");
printf("*******2、删除数据*******\n");
printf("*******3、修改数据*******\n");
printf("*******4、查找数据*******\n");
printf("*******5、打印数据*******\n");
printf("*******0、退出 *******\n");
}
//尾部插入数据
void insert(Seq *list)
{
if(N == list->pos)
{
printf("内存已用完!!!\n");
return ;
}
printf("请输入数据:");
scanf("%d",&list->data[list->pos]);
list->pos++;
printf("添加成功。\n");
}
//下标插入
void insertx(Seq *list)
{
if(N == list->pos)
{
printf("内存已用完!!!\n");
return;
}
int xb = 0, data = 0;
printf("下标必须小于%d大于等于0。\n", list->pos+1);
printf("请输入需要插入的下标:");
scanf("%d", &xb);
if(xb <= list->pos && xb >= 0)
{
printf("请输入插入的数据:");
scanf("%d", &data);
for(int i = list->pos; i > xb; i--)
{
list->data[i] = list->data[i-1];
}
list->data[xb] = data;
list->pos++;
printf("插入成功。\n");
}
else
{
printf("下标必须小于%d大于等于0,插入失败。\n", list->pos+1);
}
}
//按数据删除数据
void clean(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
int data = 0;
printf("请输入需要删除的数据:");
scanf("%d", &data);
int i = 0, j = 0;
for(; i < list->pos; i++)
{
if(data == list->data[i])
{
for(j = i; j < list->pos; j++)
{
list->data[j] = list->data[j+1];
}
list->pos--;
return ;
}
if(i == list->pos-1)
printf("没有该数据,请重新输入!!!\n");
}
}
//下标删除
void cleanxb(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return;
}
int xb = 0;
printf("输入的下标应该大于等于0小于%d。\n", list->pos);
printf("请输入需要删除的下标:");
scanf("%d", &xb);
if(xb >= 0 && xb < list->pos)
{
for(int i = xb; i < list->pos-1; i++)
{
list->data[i] = list->data[i+1];
}
list->pos--;
}
else
{
printf("输入的下标应该大于等于0小于%d,删除失败。\n", list->pos);
}
}
//按数据修改数据
void chage(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
int data = 0, flag = 0;
printf("请输入需要修改的数据:");
scanf("%d", &data);
for(int i = 0; i < list->pos; i++)
{
if(data == list->data[i])
{
flag = 1;
printf("请输入修改后的数据:");
scanf("%d", &list->data[i]);
printf("修改完成。\n");
}
if(0 == flag)
{
printf("查无数据!!!\n");
}
}
}
//下标修改
void chagexb(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return;
}
int xb = 0;
printf("输入的下标应该大于等于0小于%d。\n", list->pos);
printf("请输入需要修改的下标:");
scanf("%d", &xb);
if(xb >= 0 && xb < list->pos)
{
printf("请输入新的数据:");
scanf("%d", &list->data[xb]);
printf("修改成功。\n");
}
else
{
printf("输入的下标应该大于等于0小于%d,修改失败。\n", list->pos);
}
}
//查找数据
void find(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
int s = 0, flag = 0;
printf("请输入需要查找的数据:");
scanf("%d", &s);
for(int i = 0; i < list->pos; i++)
{
if(s == list->data[i])
{
flag = 1;
printf("\t数据\n\t%d\n", list->data[i]);
}
}
if(0 == flag)
{
printf("查无数据!!!\n");
}
}
//查找数据下标
void find1(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
int s = 0, flag = 0, arr[N] = {0}, m = 0;//m是存入下标数组的下标
printf("请输入需要查找的数据:");
scanf("%d", &s);
for(int i = 0; i < list->pos; i++)
{
if(s == list->data[i])
{
flag = 1;
arr[m] = i;
m++;
}
}
if(0 == flag)
{
printf("查无数据!!!\n");
return;
}
printf("数据中为%d的下标有:", s);
for(int j = 0; j < m; j++)
printf("%d ", arr[j]);
putchar(10);
}
//下标查找
void findxb(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return;
}
int xb = 0;
printf("请输入需要查找的下标:");
scanf("%d", &xb);
if(xb >= 0 && xb < list->pos)
{
printf("\t数据\n\t%d\n", list->data[xb]);
}
else
{
printf("输入的下标应该大于等于0小于%d,查无此数。\n", list->pos);
}
}
//遍历数据
void show1(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
printf("\t数据\n");
for(int i = 0; i < list->pos; i++)
{
printf("\t%d\n",list->data[i]);
}
}
//顺序表去重
void dedup(Seq *list)
{
if(!list->pos)
{
printf("目前没有数据!!!\n");
return ;
}
for(int i = 0; i < list->pos; i++)
{
for(int j = i+1; j < list->pos; j++)
{
if(list->data[i] == list->data[j])
{
for(int k = j; k < list->pos-1; k++)
{
list->data[k] = list->data[k+1];
}
j--;
list->pos--;
}
}
}
for(int i = 0; i < list->pos; i++)
{
printf("\t%d\n",list->data[i]);
}
}