C语言线性表急求大神解

发布网友 发布时间:2022-04-24 14:09

我来回答

3个回答

热心网友 时间:2022-05-25 13:48

#include<stdio.h>
#include<stdlib.h>

typedef struct
{
int *data,len;
}SL;

void showlist(SL *l)
{
int i;

for(i=0;i<(*l).len-1;i++)
{
printf("%d ",(*l).data[i]);
}
printf("%d\n",(*l).data[(*l).len-1]);
}

void createlist(SL *l)
{
int i,n;

printf("请输入线性表的长度:");
scanf("%d",&n);
(*l).len=n;
(*l).data=(int*)calloc(n,sizeof(int));
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",(*l).data+i);
}

//找到,返回第1次出现的下标,
//找不到返回-1
int search(SL *l,const int n)
{
int i;

for(i=0;i<(*l).len;i++)
{
if(n==(*l).data[i])
return i;
}
return -1;
}

//n为要删除的整数的值,
//会删除所有值为n的线性表的元素
void delete(SL *l,const int n)
{
int i,j;

for(i=0;i<(*l).len;)
{
if(n==(*l).data[i])
{
for(j=i+1;j<(*l).len;j++)
{
(*l).data[j-1]=(*l).data[j];
}
(*l).len--;
}
else
i++;
}
}

void deleterange(SL *l,const int min,const int max)
{
int i;

for(i=0;i<(*l).len;i++)
{
if((*l).data[i]>=min && (*l).data[i]<=max)
delete(l,(*l).data[i]);
}
}

void freelist(SL *l)
{
if(!(*l).data)
free((*l).data);
}

int main()
{
int loc,tofind,min,max;
SL l;

createlist(&l);
printf("请输入要查找的整数:");
scanf("%d",&tofind);
if(-1!=(loc=search(&l,tofind)))
printf("此数据在线性表中第1次出现的下标是:%d\n",loc);
else
puts("线性表中无此数据");
printf("请输入要删除的整数的最小值 最大值:");
scanf("%d %d",&min,&max);
deleterange(&l,min,max);
printf("删除值为%d-%d的元素后的线性表如下:\n",min,max);
showlist(&l);
freelist(&l);
system("PAUSE");
return 0;
}

热心网友 时间:2022-05-25 13:48

可以看我的回答,有个ArrayList类

热心网友 时间:2022-05-25 13:49

#include <stdio.h>
#include <stdlib.h>

typedef int DataType; // 定义数据类型

typedef struct {
DataType *data;   // data指向数据区的首个数据
int length;       // 当前数据长度
}SqList;

void Sort(SqList *L) {
int i,j,k;
DataType tmp;
for(i = 0; i < L->length - 1; ++i) {
k = i;
for(j = i + 1; j < L->length; ++j)
if(L->data[k] > L->data[j])
k = j;
if(k != i) {
tmp = L->data[k];
L->data[k] = L->data[i];
L->data[i] = tmp;
}
}
}

SqList *Create() {// 创建给定数据个数的顺序表
int n,i;
SqList *L = (SqList *)malloc(sizeof(SqList));
printf("数据个数:");
scanf("%d",&n);
L->data = (DataType *)malloc(n * sizeof(DataType));
if(L->data == NULL) {
L->length = 0;
return NULL;
}
printf("请输入%d个整数用于创建顺序表\n",n);
for(i = 0; i < n; ++i)
scanf("%d",&L->data[i]);
L->length = n;
return L;
}

SqList *CreateList(DataType a[],int n) {
int i;
SqList *L;
L = (SqList *)malloc(sizeof(SqList));
L->data = (DataType *)malloc(n * sizeof(DataType));
L->length = n;
for(i = 0; i < n; ++i) L->data[i] = a[i];
Sort(L);
return L;
}

int InsertList(SqList *L,DataType x) {
int i,j;
for (i = 0;i < L->length;i++) {
if(x <= L->data[i]) {
for(j = L->length;j >= i;j--)
L->data[j + 1] = L->data[j]; // 结点后移
L->data[i] = x;
L->length++;
return 1;
}
}
L->data[L->length++] = x;
return 1;
}

int RemoveListElem(SqList *L,DataType d) {
int i,j;
for(i = 0; i < L->length; ++i) {
if(L->data[i] == d) {
for(j = i; j < L->length - 1; ++j)
L->data[j] = L->data[j + 1];
L->length--;
return 1;
}
}
return 0;
}

int RemoveRangeElem(SqList *L,DataType a,DataType b) {//用于删除给定范围内的数据元素
int i,j,flag = 0;
for(i = 0; i < L->length; ++i) {
if(L->data[i] >= a && L->data[i] <= b) {
for(j = i; j < L->length - 1; ++j)
L->data[j] = L->data[j + 1];
L->length--;
flag = 1;
}
}
return flag;
}

SqList *AndList(SqList *A, SqList *B) {   /* A∩B */
int i,j,k = 0;
int len = (A->length > B->length) ? B->length : A->length;
SqList *C = (SqList *)malloc(sizeof(SqList));
C->length = len;
C->data = (DataType *)malloc(len * sizeof(DataType));
for(i = 0; i < A->length; ++i) {
for(j = 0; j < B->length; ++j) {
if(A->data[i] == B->data[j]) {
C->data[k++] = A->data[i];
break;
}
}
}
C->length = k;
return C;
}

SqList *OrList(SqList *A, SqList *B) {   /* A∪B */
int i,j,flag;
DataType e;
SqList *C = (SqList *)malloc(sizeof(SqList));
C->length = A->length + B->length;
C->data = (DataType *)malloc(C->length * sizeof(DataType));
for(i = 0; i < A->length; ++i) C->data[i] = A->data[i];
for(i = 0; i < B->length; ++i) {
e = B->data[i];
flag = 1;
for(j = 0; j < C->length; ++j) {
if(e == C->data[j]) {
flag = 0;
break;
}
}
if(flag) InsertList(C,e);
}
return C;
}

void PrintList(SqList *L) {
int i;
for(i = 0; i < L->length; ++i)
printf("%d ",L->data[i]);
printf("\n");
}

void FreeList(SqList *L) {
free(L->data);
free(L);
}

void main() {
DataType x;
DataType arra[] = {36,24,31,5,90,65,70,39,37};
DataType arrb[] = {9,8,43,51,37,,33,46,29,80,56};
int alen = sizeof(arra)/sizeof(arra[0]);
int blen = sizeof(arrb)/sizeof(arrb[0]);
SqList *A = CreateList(arra,alen);
printf("A线性表为: ");
PrintList(A);
SqList *B = CreateList(arrb,blen);
printf("B线性表为: ");
PrintList(B);
SqList *C = AndList(A,B);
SqList *D = OrList(A,B);
printf(" C = A∩B: ");
PrintList(C);
printf(" D = A∪B: ");
PrintList(D);

printf("在D表中插入数据 : ");
scanf("%d",&x);
InsertList(D,x);
printf("D表插入x后 :");
PrintList(D);

printf("删除D表中数据 : ");
scanf("%d",&x);
RemoveListElem(D,x);
printf("删除x后的D表为 :");
PrintList(D);
FreeList(A);
FreeList(B);
FreeList(C);
FreeList(D);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com