#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#define DATATYPE1 int
#define MAXSIZE 100
typedef struct
{
DATATYPE1 data[MAXSIZE];
int len;
}SEQUENLIST;
void INITIATE(SEQUENLIST* L) //初始化顺序表
{
assert(L); //避免传空指针
L->len = 0;
}
void Inputlist(SEQUENLIST* L, int n) //给定顺序表的长度
{
assert(L);
L->len = n;
}
void Printlist(SEQUENLIST* L) //打印顺序表
{
assert(L);
for (int i = 0; i < L->len; i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}
void SLPushFront(SEQUENLIST* L, int i, int x) //插入
{
assert(L);
if (i<0 || i>L->len || i >= MAXSIZE)
{
printf("error");
}
else
{
for (int k = L->len; k >= i; k--)
{
L->data[k] = L->data[k - 1];
}
L->data[i] = x;
L->len++;
}
}
void DELETE(SEQUENLIST* L, int i) //删除
{
assert(L);
if (i < 0 || i >= L->len || L->len == 0)
{
printf("error\n");
}
else
{
for (int k = i; k < L->len-1; k++)
{
L->data[k] = L->data[k + 1];
}
L->len--;
}
}
int LOCATE(SEQUENLIST* L, DATATYPE1 x) //查找
{
assert(L);
for (int k = 0; k < L->len; k++)
{
if (L->data[k] == x)
{
return k;
}
}
printf("没找到,返回0\n");
return 0;
}
void bubble_sort(DATATYPE1 date[], DATATYPE1 sz) //冒泡排序
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int flag = 1;
int j = 0;
for (j = 0; j < sz - i - 1; j++)
{
if (date[j] > date[j + 1])
{
flag = 0;
int tmp = date[j];
date[j] = date[j + 1];
date[j + 1] = tmp;
}
}
if (flag == 1)
{
break;
}
}
}
void DELETESame(SEQUENLIST* L) //删除相同元素
{
assert(L);
bubble_sort(L->data, L->len);
int index = 0, i = 0;
for (i = 0 , index = 1; i < L->len; i++)
{
for (int n = i + 1; n < L->len; n++)
{
if (L->data[i] == L->data[n])
{
;
}
else
{
L->data[index] = L->data[n];
i = n - 1;
index++;
break;
}
}
}
L->len =index;
}
int main()
{
//(1)
int n = 0;
printf("请输入n的值:\n");
scanf("%d", &n);
SEQUENLIST* L = (SEQUENLIST*)malloc(n * sizeof(SEQUENLIST));
Inputlist(L, n);
for (int i = 0; i < n; i++)
{
scanf("%d", &L->data[i]);
}
Printlist(L);
//(2)
printf("请输入插入的下标i和值x:\n");
int i = 0, x = 0;
scanf("%d%d", &i, &x);
SLPushFront(L, i, x);
Printlist(L);
//(3)
printf("请输入删除的下标i:\n");
scanf("%d", &i);
DELETE(L, i);
Printlist(L);
//(4)
printf("请输入要查找的元素x:\n");
scanf("%d", &x);
int index = LOCATE(L, x);
printf("%d在顺序表的位序号为:%d\n", x, index);
//(5)
DELETESame(L);
printf("删除同样的元素后:");
Printlist(L);
free(L); //归还申请空间
return 0;
}
顺序表专题实验
最新推荐文章于 2025-05-16 20:57:46 发布