#c语言实现顺序表及其相关 *** 作
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#define ERROR 0
#define TRUE 1
#define MAXSIZE 20 /*初始分配的顺序表长度*/
typedef int ElemType; /*定义表元素的类型*/
typedef struct {
ElemType elem[MAXSIZE]; /*存储空间的基地址,即存储线性表中元素的存储空间及大小*/
int length; /*顺序表的当前长度*/
}SeqList;
int Init_SeqList(SeqList* L); /*初始化顺序表*/
int Create_SeqList(SeqList* L, int n); /*创建顺序表*/
int Insert_SeqList(SeqList* L, int i, ElemType x);/*顺序表的插入 *** 作*/
int Traverse_SeqList(SeqList* L); /*顺序表的遍历*/
int Delete1_SeqList(SeqList* L, int i); /*顺序表的按序号删除 *** 作*/
int Delete2_SeqList(SeqList* L, ElemType x); /*顺序表的按数据删除 *** 作*/
int Find_SeqList(SeqList* L, ElemType x); /*查找值为x的元素*/
int Init_SeqList(SeqList* L) {
L->length=0; /*空表长度为0 */
return TRUE;
}/*InitList*/
int Create_SeqList(SeqList* L, int n) {
ElemType x;
int i;
for (i = 0;i<n ; i++) {/*创建顺序表*/
printf("Please Input data %d: ", i+1);
scanf("%d", &L->elem[i]);
L->length++;
if (i>MAXSIZE-1)
return ERROR;
}
return TRUE;
}/*CreateList*/
/*输出顺序表中的元素*/
int Traverse_SeqList(SeqList* L) {
int i;
for (i = 0; i < L->length; i++)
printf("%-7d", L->elem[i]);
printf("%\n\n");
return TRUE;
}/*TraverseList*/
/*在顺序表L中,序号i的位置上插入值为x的元素*/
int Insert_SeqList(SeqList* L, int i, ElemType x) {
int j;
if (i<1 || i>MAXSIZE)//i不在顺序表的范围内
return ERROR;
if (L->length == MAXSIZE)//顺序表已满
return ERROR;
for (j = L->length-1; j>=i-1;j--) {//插入--从后往前循环
L->elem[j+1]=L->elem[j];
}
L->elem[i-1]=x;
L->length++;
return TRUE;
}/*ListInsert*/
/*在顺序表中删除第i个元素*/
int Delete1_SeqList(SeqList* L, int i) {
int j;
if (i<1 || i>MAXSIZE)
return ERROR;
for (j = i; j<=L->length-1; j++)//从前往后一个一个往前挤--从前往后挤
L->elem[j-1]=L->elem[j];
L->length--;
return TRUE;
}
/*在顺序表中按照数据删除对象,即删除值为x的元素*/
int Delete2_SeqList(SeqList* L, ElemType x) {
int i, j;
for (i = 0; i<=L->length-1; i++)/*查找数据x的位置*/
if (L->elem[i]==x)
break;
if (i==L->length)/*s顺序表中没有值为x的对象*/
return ERROR;
for (j = i+1; j<=L->length-1; j++)/*删除值为x的对象*/
L->elem[j-1]=L->elem[j];
L->length--;
return TRUE;
}/*Delete2*/
/*在顺序表中查找指定值元素,返回其序号,若没有返回ERROR*/
int Find_SeqList(SeqList* L, ElemType x) {
int i = 0;
for (i = 0; i < L->length - 1; i++)
{
if (L->elem[i] == x)
break;
}
if (i == L->length)
return ERROR;
else return i+1;
}/*Find*/
/*顺序表链接,把表s2连接在s1的后面,失败返回0*/
int Cat_SeqList(SeqList* L1, SeqList* L2)
{
int i;
if (L1->length+L2->length>MAXSIZE)/*溢出,无法连接*/
return ERROR;
for (i=0; i<=L2->length-1; i++)
L1->elem[L1->length+i]=L2->elem[i];
L1->length = L1->length + L2->length;//更新L1中length的值
return TRUE;
}/*Cat*/
int main() {
struct list* s1, * s2;
int n, m, k;
char c;
printf("**************************************************\n");
printf(" 顺 序 表 常 用 算 法\n");
printf("**************************************************\n\n");
s1 = (SeqList*)malloc(sizeof(SeqList)); /*建立顺序表sl,为sl开辟存储空间*/
s2 = (SeqList*)malloc(sizeof(SeqList)); /*建立顺序表sl,为s2开辟存储空间*/
printf("1、初始化线性表:设置表长为0\n");
if (Init_SeqList(s1)) printf("顺序表初始化成功……\n\n");
printf("2、创建顺序表:\n");
do {
printf("请输入顺序表长度(n>=0):");
scanf("%d", &n); /*输入顺序表的元素个数*/
} while (n < 0);
if (Create_SeqList(s1, n)) printf("顺序表创建成功……\n\n"); ;
printf("3、遍历顺序表:\n"); /*依次访问顺序表中所有元素*/
Traverse_SeqList(s1);
printf("4、顺序表的插入 *** 作:\n");
printf("请输入待插入的位序:");
scanf("%d", &m);
printf("请输入待插入的数据:");
scanf("%d", &k);
if (Insert_SeqList(s1, m, k)) printf("插入 *** 作执行成功……\n *** 作结果:");
Traverse_SeqList(s1);
printf("5、请输入删除方式,1表示按内容删除,2表示按序号删除\n");
scanf("%d", &m);
if (m == 2)
{
printf("您是选择按照序号删除对象,请输入带删除元素的序号:");
scanf("%d", &k);
if (Delete1_SeqList(s1, k))
printf("删除第%d号元素成功……\n *** 作结果", k);
else
printf("删除失败!");
printf(" *** 作结果是:");
Traverse_SeqList(s1);
}
else if (m == 1)
{
printf("您是选择按照内容删除对象,请输入待删除元素的数据的值:");
scanf("%d", &m);
if (Delete2_SeqList(s1, m))
printf("删除元素%d的值成功……\n *** 作结果:", m);
else
printf("删除失败!\n");
Traverse_SeqList(s1);
}
else
printf("输入错误!\n");
printf("6、请输入待查找元素值:");
scanf("%d", &m);
if (Find_SeqList(s1, m) != ERROR)
printf("查找成功,值为 %d 的元素序号为 %d\n", m, Find_SeqList(s1, m));
else
printf("查找失败!顺序表中没有值为%d的元素。
\n"
, m);
printf("7、创建顺序表s2:\n");
if (Init_SeqList(s2))printf("初始化表s2成功!\n");
printf("请输入顺序表s2长度(n>=0):");
scanf("%d", &n); //输入顺序表s2的元素个数
if (Create_SeqList(s2, n)) printf("顺序表s2创建成功……\n\n"); ;
printf("8、顺序表的连接 *** 作:\n");
if (Cat_SeqList(s1, s2)) printf("顺序表链接 *** 作成功……\n *** 作结果:");
Traverse_SeqList(s1);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)