
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int datatype; // 把int起一个别名datatype
#define MAXSIZE 20 // 线性表长度:不变
// 顺序表结构体:只能有两个元素:数据元素,顺序表长度
// 只要多一个成员,就不是顺序表了
typedef struct
{
// 数据元素:整数
datatype data[MAXSIZE];
// 顺序表长度
int len;
} seqlist;
seqlist *Create();
int insert_rear(seqlist *list, datatype e);
void output(seqlist *list);
int IsFull(seqlist *list);
int select_by_data(seqlist *list, int e);
int update_by_data(seqlist *list, datatype e, datatype new);
int Bubble(seqlist *list);
seqlist *free_fun(seqlist *list);
#include "fun.c"
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
seqlist *list = Create();
int n;
datatype e;
printf("请输入需要输入数据的个数:\n");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf("请输入第%d个数据", i + 1);
scanf("%d", &e);
insert_rear(list, e);
}
output(list);
printf("请输入需要修改的元素:\n");
datatype key;
datatype new;
scanf("%d", &key);
printf("请输入新的元素:\n");
scanf("%d", &new);
update_by_data(list, key, new);
output(list);
Bubble(list);
output(list);
list=free_fun(list);
return 0;
}
fun.c
#include "head.h"
seqlist *Create()
{
seqlist *list = (seqlist *)malloc(sizeof(seqlist));
if (list == NULL)
{
return NULL;
}
list->len = 0;
return list;
}
int insert_rear(seqlist *list, datatype e)
{
if (IsFull(list))
{
printf("顺序表满了\n");
return -1;
}
list->data[list->len] = e;
list->len++;
return 0;
}
int IsFull(seqlist *list)
{
if (list->len == MAXSIZE)
{
return -1;
}
return 0;
}
int IsEmpty(seqlist *list)
{
if (list->len == 0)
{
return -1;
}
return 0;
}
void output(seqlist *list)
{
for (int i = 0; i < list->len; i++)
{
printf("%d\t", list->data[i]);
}
printf("\n");
}
int update_by_data(seqlist *list, datatype e, datatype new)
{
int flag = select_by_data(list, e);
// printf("%d",flag);
if (flag == -1)
{
printf("没找到输入的数据\n");
return -1;
}
list->data[flag] = new;
return 0;
}
int select_by_data(seqlist *list, int e)
{
for (int i = 0; i < list->len; i++)
{
if (e == list->data[i])
{
return i;
}
}
return -1;
}
int Bubble(seqlist *list)
{
if (IsEmpty(list))
{
return -1;
printf("顺序表是空的!\n");
}
// 冒泡排序,从小到大
for (int i = 0; i < list->len; i++)
{
for (int j = 0; j < list->len - i - 1; j++)
{
if (list->data[j] > list->data[j + 1])
{
datatype t = list->data[j];
list->data[j] = list->data[j + 1];
list->data[j + 1] = t;
}
}
}
return 0;
}
seqlist *free_fun(seqlist *list)
{
if(list!=NULL){
free(list);
list=NULL;
}
return list;
}

被折叠的 条评论
为什么被折叠?



