#include <stdio.h>
#include <malloc/malloc.h>
///<1.定义结构体
#define ListSize 100
typedef int DataType;
typedef struct {
DataType data[ListSize];
int length;
}SeqList;
///< 初始化顺序表
SeqList initSeqList(){
SeqList seqList;
seqList.length = 0;
int length,i;
printf("请输入表长:\n");
scanf("%d",&length);
printf("表长:%d\n",length);
seqList.length = length;
for (i = 0; i< length; i++) {
printf("请输入第%d个元素:\n",i+1);
scanf("%d",&seqList.data[i]);
}
return seqList;
}
///< 打印顺序表
void printSeqList(SeqList seqList){
int i;
printf("******************************************\n");
for (i = 0; i< seqList.length; i++) {
printf("%d\t",seqList.data[i]);
}
printf("\n******************************************\n");
}
///< 求表长
int printSeqListLength(SeqList seqList){
return seqList.length;
}
///< 取表中元素
int getNodeInSeqList(SeqList seqList,int location){
return seqList.data[location - 1];
}
/**
按值查找
@param seqList 要操作的线性表
@param value 要查找的值
@return 数组
*/
int * getNodeInSeqListWithValue(SeqList seqList,int value){
int i,tag = 0;///< tag检测数组个数
int a[seqList.length];
for (i = 0; i< seqList.length; i++) {
if (value == seqList.data[i]) {
a[tag] = i;
tag ++;
}
}
int * array = (int *)malloc(sizeof(int)*tag);
tag = 0;
for (i = 0; i< seqList.length; i++) {
if (value == seqList.data[i]) {
array[tag] = i;
tag ++;
}
}
return array;
}
///< 顺序表的插入操作
/**
顺序表的插入操作
@param seqList 要插入的顺序表
@param location 插入位置
@param value 插入的值
@return seqList
*/
SeqList insertSeqList(SeqList seqList,int location,int value){
seqList.length ++;
printf("新的表长是:%d\n",seqList.length);
printSeqList(seqList);
int j;
for (j = seqList.length -1 ; j> location - 1; j--) {
seqList.data[j] = seqList.data[j-1];
printf("seqList.data[%d] = %d\n",j,seqList.data[j]);
}
seqList.data[location - 1] = value;
return seqList;
}
///< 顺序表的删除操作
void deleteSeqlist(SeqList seqList,int location){
int i;
for (i = location - 1 ; i< seqList.length - 1; i++) {
seqList.data[i] = seqList.data[i+1];
}
seqList.length --;
printSeqList(seqList);
}
///< 测试代码
///< 顺序表的表长
void testSeqListLength(SeqList seqList){
int length = printSeqListLength(seqList); ///< 1.求表长
printf("表长:%d\n",length);
}
///< 顺序表的插入操作
void testSeqListInsertMethod(SeqList seqList){
int location,value;
printf("请输入要插入的位置:\n");
scanf("%d",&location);
printf("请输入要插入的值:\n");
scanf("%d",&value);
seqList = insertSeqList(seqList, location, value);
printSeqList(seqList);
}
///< 顺序表的删除操作
void testSeqListDeleteMethod(SeqList seqList){
int delLocation;
printf("请输入要删除的元素的下标:\n");
scanf("%d",&delLocation);
deleteSeqlist(seqList, delLocation);
}
///< 顺序表的查找操作
void testSeqListSearchMethod(SeqList seqList){
int location;
printf("请输入您要查找的元素下标:\n");
scanf("%d",&location);
int data = getNodeInSeqList(seqList,location); ///< 查找
printf("表中第%d个元素是:%d\n",location,data);
int value;
printf("请输入表的值:\n");
scanf("%d",&value);
int * array = getNodeInSeqListWithValue(seqList, value);
printf("%d\n",array[0]);
printf("%d\n",array[1]);
}
int main(int argc, const char * argv[]) {
SeqList seqList = initSeqList();
printSeqList(seqList);
testSeqListLength(seqList); ///< 求表长
testSeqListInsertMethod(seqList); ///< 顺序表的插入操作
testSeqListDeleteMethod(seqList); ///< 顺序表的删除操作
testSeqListSearchMethod(seqList); ///< 顺序表的查找操作
return 0;
}
网友评论