顺序表还原
/*顺序表还原*/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt) { //顺序表置空
slt->size = 0;
}
void uninit(sequence_list *slt) { //默认顺序表
slt->size = 3;
slt->a[0] = 12;
slt->a[1] = 5;
slt->a[2] = 232;
}
void append(sequence_list *slt, datatype x) { //顺序表后插
if (slt->size == MAXSIZE) {
printf("顺序表是满的!\n");
exit(1);
}
slt->a[slt->size] = x;
++slt->size;
}
void display(sequence_list slt) { //打印顺序表各节点值
if (!slt.size)
printf("顺序表是空的!\n");
else
for (int i = 0; i < slt.size; ++i) {
printf("%5d",slt.a[i]);
}
}
int empty(sequence_list slt) { //判断顺序表是否为空
printf("顺序表为空!\n");
return(slt.size == 0 ? 1 : 0);
}
int find(sequence_list slt, datatype x) { //查找节点位置
int i = 0;
while (i < slt.size&&slt.a[i] != x)
++i;
return (i < slt.size ? i : -1);
}
datatype get(sequence_list slt, int i) { //取得对应节点的值
if (i<0 || i>slt.size) {
printf("指定位置节点不存在!\n");
exit(1);
}
else
return slt.a[i];
}
void insert(sequence_list *slt,datatype x,int position){ //任意位置插入节点值
if (slt->size == MAXSIZE) {
printf("顺序表是满的,无法插入!\n");
exit(1);
}
if (position<0 || position>slt->size) {
printf("指定位置不存在,无法插入!\n");
exit(1);
}
for (int i = slt->size; i > position; --i)
slt->a[i] = slt->a[i - 1];
slt->a[position] = x;
++slt->size;
}
void dele(sequence_list *slt, int position) { //删除指定位置节点
if (slt->size == 0) {
printf("顺序表是空的!");
exit(1);
}
if (position < 0 || position >= slt->size) {
printf("指定的删除位置不存在!");
exit(1);
}
for (int i = position; i < slt->size - 1; ++i)
slt->a[i] = slt->a[i + 1];
--slt->size;
}
int main()
{
sequence_list slt;
init(&slt);
while (true) {
printf("\n----------------------------------------------------------------------------------------------------------------------------------------------------------------");
printf("\n请输入你的选择:1、顺序表置空 2、打印各节点值 3、查找节点位置 4、取得对应节点的值 5、任意位置插入节点值 6、顺序表后插 7、生成默认顺序表(12 5 232) 8、删除指定节点\n");
int swi;
scanf("%d", &swi);
switch (swi) {
case 0:
return 0;
case 1:
init(&slt);
printf("顺序表已置空!");
break;
case 2:
display(slt);
break;
case 3:
datatype x;
printf("请输入要查找的节点:");
scanf("%d", &x);
printf("要查找的节点位置为:%d", find(slt, x));
break;
case 4:
int i;
printf("请输入要查找的节点位置:");
scanf("%d", &i);
printf("要查找的节点为:%d", get(slt, i));
break;
case 5:
datatype y, p;
printf("请输入要插入的数以及位置(用空格分隔):");
scanf("%d%d", &y, &p);
insert(&slt, y,p);
printf("插入完成,显示顺序表如下:\n");
display(slt);
break;
case 6:
datatype z;
printf("请输入要插入的数:");
scanf("%d", &z);
append(&slt,z);
printf("后插完成,显示顺序表如下:\n");
display(slt);
break;
case 7:
printf("生成成功!\n");
uninit(&slt);
break;
case 8:
int po;
printf("请输入要删除的节点的位置:");
scanf("%d", &p);
dele(&slt, p);
printf("删除成功!显示顺序表如下:\n");
display(slt);
break;
}
}
return 0;
}
顺序表合并以及排序(里边使用了时间函数进行数字随机生成)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt) { //顺序表置空
slt->size = 0;
}
void display(sequence_list slt) { //打印顺序表各节点值
if (!slt.size)
printf("顺序表是空的!\n");
else
for (int i = 0; i < slt.size; ++i) {
printf("%5d",slt.a[i]);
}
}
void list(sequence_list *slt) { //顺序表由小到大排序
int temp;
for (int j = slt->size; j > 0; --j) {
for (int i = 0; i < slt->size - 1; ++i) {
if (slt->a[i] > slt->a[i + 1]) {
temp = slt->a[i];
slt->a[i] = slt->a[i + 1];
slt->a[i + 1] = temp;
}
}
}
}
int main()
{
srand((unsigned)time(NULL));
sequence_list a, b, c;
int a1, b1, c1;
init(&a);
init(&b);
init(&c);
printf("请输入a的顺序表节点数:");
scanf("%d", &a1);
a.size = a1;
for (int i = 0; i < a.size; ++i) {
a.a[i] = rand() % 100;
}
printf("自动生成a的顺序表为\n");
display(a);
printf("\n-------------------------------------------------------------\n");
printf("排序后a的顺序表为\n");
list(&a);
display(a);
printf("\n-------------------------------------------------------------\n");
printf("请输入b的顺序表节点数:");
scanf("%d", &b1);
b.size = b1;
for (int i = 0; i < b.size; ++i) {
b.a[i] = rand() % 100;
}
printf("自动生成b的顺序表为\n");
display(b);
printf("\n-------------------------------------------------------------\n");
printf("排序后b的顺序表为\n");
list(&b);
display(b);
printf("\n---------------------------------------------------------------\n");
c.size = a.size + b.size;
for (int i = 0; i < a.size; ++i)
c.a[i] = a.a[i];
for (int i = a.size, j = 0; i < c.size; ++i, ++j)
c.a[i] = b.a[j];
printf("合并ab后c的顺序表为\n");
display(c);
printf("\n---------------------------------------------------------------\n");
printf("排序后c的顺序表为\n");
list(&c);
display(c);
return 0;
}