SeqList.h
#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 20
typedef int DataType;
typedef struct
{
int length; //顺序表长度
DataType *data; //元素指针
}SeqList;
int initSeqList(SeqList *L); //初始化顺序表
int insertSeqList(SeqList *L,int i,DataType x); //向顺序表插入
int deleteSeqList(SeqList *L,int i); //从顺序表中删除
int updateSeqList(SeqList *L,int i,DataType x); //在顺序表中修改
void printSeqList(SeqList *L); //输出顺序表全部元素
int findSeqList(SeqList *L,DataType x); //从顺序表中查找
#endif // SEQLIST_H_INCLUDED
SeqList.c
#include "SeqList.h"
/**********************************
* 函数名:initSeqList()
* 参数:SeqList *L
* 功能:初始化顺序表
* 返回值:int型
***********************************/
int initSeqList(SeqList *L)
{
L->data = (DataType *)malloc(sizeof(DataType));
if(!L->data)
exit(-1);
L->length = 0;
return 1;
}
/**********************************
* 函数名:insertSeqList()
* 参数:SeqList *L,int i,DataType x
* 功能:向表中插入一个元素
* 返回值:int型
***********************************/
int insertSeqList(SeqList *L,int i,DataType x)
{
int j;
if(L->length>=MaxSize)
printf("上溢\n");
if(i<1 || i>L->length + 1)
printf("位置非法\n");
for (j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i - 1] = x;
L->length++;
return 1;
}
/**********************************
* 函数名:deleteSeqList()
* 参数:SeqList *L,int i
* 功能:从表中删除一个元素
* 返回值:int型
***********************************/
int deleteSeqList(SeqList *L,int i)
{
if(L->length==0)
printf("下溢\n");
if(i<1 || i>L->length + 1)
printf("位置非法\n");
for (int j = i; j < L->length; j++)
L->data[j - 1] = L->data[j];
L->length--;
return 1;
}
/**********************************
* 函数名:updateSeqList()
* 参数:SeqList *L,int i,DataType x
* 功能:在表中修改一个元素
* 返回值:int型
***********************************/
int updateSeqList(SeqList *L,int i,DataType x)
{
if(i<1 || i>L->length + 1)
printf("位置非法\n");
L->data[i-1]=x;
return 1;
}
/**********************************
* 函数名:printSeqList()
* 参数:SeqList *L
* 功能:输出顺序表的全部元素
* 返回值:无
***********************************/
void printSeqList(SeqList *L)
{
int i;
if(L->length==0)
printf("顺序表为空!\n");
else
{
for(i=0;i<L->length;i++)
{
printf("%d\t",L->data[i]);
}
}
printf("\n");
}
/**********************************
* 函数名:findSeqList()
* 参数:SeqList *L,DataType x
* 功能:在表中查找一个元素
* 返回值:int型
***********************************/
int findSeqList(SeqList *L,DataType x)
{
int i;
DataType *p = L->data;
for(i=0;i<L->length;i++,p++)
{
if(*p == x)
{
printf("找到值为%d的元素,其位置为%d\n", x, i+1);
return 1;
}
}
printf("在顺序表中没有找到值为%d的元素.\n", x);
return 0;
}
main.c
#include "SeqList.h"
int main()
{
int choice;
int position;
DataType data;
SeqList *sl = (SeqList *)malloc(sizeof(SeqList));
while(1)
{
printf("======顺序表操作演示=======\n");
printf("1. 创建一个空的顺序表\n");
printf("2. 输出顺序表的全部数据\n");
printf("3. 查询数据在顺序表中的位置\n");
printf("4. 向顺序表指定位置插入数据\n");
printf("5. 删除顺序表指定位置的数据\n");
printf("6. 更新顺序表指定位置的数据\n");
printf("7. 退出程序\n");
printf("===========================\n");
printf("\n输入1-8,选择所需功能号:");
scanf("%d", &choice);
printf("\n您选择的功能号为:%d\n", choice);
switch(choice)
{
case 1:
{
if(initSeqList(sl))
printf("顺序表创建成功!\n");
else
printf("顺序表创建失败!\n");
break;
}
case 2:
{
printSeqList(sl);
break;
}
case 3:
{
printf("请输入被查询数据:");
scanf("%d",&data);
findSeqList(sl,data);
break;
}
case 4:
{
printf("请输入插入位置:");
scanf("%d",&position);
printf("请输入被插入数据:");
scanf("%d",&data);
if(insertSeqList(sl,position,data))
printf("插入数据成功\n");
else
printf("插入数据失败\n");
break;
}
case 5:
{
printf("请输入被删除数据的位置:");
scanf("%d",&position);
if(deleteSeqList(sl,position))
printf("删除数据成功\n");
else
printf("删除数据失败\n");
break;
}
case 6:
{
printf("请输入被修改数据的位置:");
scanf("%d",&position);
printf("请输入修改后的数据:");
scanf("%d",&data);
if(updateSeqList(sl,position,data))
printf("修改数据成功\n");
else
printf("修改数据失败\n");
break;
}
case 7:
{
exit(0);
break;
}
default:break;
}
}
return 0;
}