一道C语言的题 求答案

2024-11-29 02:18:02
推荐回答(1个)
回答1:

#include "StdAfx.h"
#include
#include

typedef int elemType;
struct List
{
elemType *list;
int size;
int maxSize;
};

void initList(struct List *L, int ms)
{

if(ms <= 0){
printf("MaxSize非法! ");
exit(1);
}
L->maxSize = ms;
L->size = 0;
L->list = (int *)malloc(ms * sizeof(elemType));
if(!L->list)
{
printf("空间分配失败! ");
exit(1);
}
return;
}

/* .顺序扫描(即遍历)输出线性表L中的每个元素 */
void traverseList(struct List *L)
{
int i;
for(i = 0; i < L->size; i++)
{
printf("%d ", L ->list[i]);
}
printf(" ");
return;
}

/* 从线性表L中查找值与x相等的元素,若查找成功则返回其位置,否则返回-1 */
int findList(struct List *L, elemType x)
{
int i;
for(i = 0; i < L->size; i++)
{
if(L->list[i] == x)
{
return i;
}
}
return -1;
}

void againMalloc(struct List *L)
{
/* 空间扩展为原来的2倍,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间 */
elemType *p = (elemType *)realloc(L->list, 2 * L->maxSize * sizeof(elemType));
if(!p)
{
printf("存储空间分配失败! ");
exit(1);
}
L->list = p;
L->maxSize = 2 * L->maxSize;
}
/* 向线性表L的表尾插入元素x */
void insertLastList(struct List *L, elemType x)
{
if(L->size == L ->maxSize)
{ /* 重新分配更大的存储空间 */
againMalloc(L);
}
L->list[L->size] = x; /* 把x插入到表尾 */
L->size++; /* 线性表的长度增加1 */
return;
}

/* 从线性表L中删除第pos个元素并返回它,若删除失败则停止程序运行 */
elemType deletePosList(struct List *L, int pos)
{
elemType temp;
int i;
if(pos < 1 || pos > L->size)
{ /* pos越界则删除失败 */
printf("pos值越界,不能进行删除操作! ");
exit(1);
}
temp = L->list[pos-1];
for(i = pos; i < L->size; i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}

/****************************************************************/

void main()
{
int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int i,x;
struct List L;
initList(&L, 5);
for(i = 0; i < 10; i++)
{
insertLastList(&L, a[i]);
}

traverseList(&L);
printf("\n");
printf("输入删除元素");
scanf("%d",&x);
int pos=findList(&L,x);
if(pos==-1)
{
printf("不存在此数\n");
}
else
{
deletePosList(&L,pos+1);
}
traverseList(&L);
printf("\n");
return ;
}