//main.c
#include<stdio.h>
#include<stdlib.h>
#include"list .h"
/*
void CreateList(SqList *L,int n); //创建顺序表
void InitList(SqList *L); //初始化顺序表
void InsertList(SqList *L, int index, elem e); //在index处插入
void ListDelete(SqList *L, int index); //删除index处元素
int LocteElem(SqList *L, elem e); //查找数据e在顺序表里的位置
void GetElem(SqList* L, int index); //输出index处的值
typedef struct data {
int expn;//指数
double coef;//系数
}elem;
typedef struct {
}SqList; elem* data;//数据
int length;//表长
*/
int main()
{
SqList* k=NULL;
CreateList(k, 5);
return 0;
}
//list.h
#define MAXSIZE 100
typedef struct data {
int expn;//指数
double coef;//系数
}elem;
typedef struct {
elem* data;//数据
int length;//表长
}SqList;
void CreateList(SqList *L,int n); //创建顺序表
void InitList(SqList *L); //初始化顺序表
void InsertList(SqList *L, int index, elem e); //在index处插入
void ListDelete(SqList *L, int index); //删除index处元素
int LocteElem(SqList *L, elem e); //查找数据e在顺序表里的位置
void GetElem(SqList* L, int index); //输出index处的值
//list.c
#include<stdlib.h>
#include<stdio.h>
#include"list .h"
#ifndef _LIST_H_
#define _LIST_H_
/*
typedef struct data {
int expn;//指数
double coef;//系数
}elem;
typedef struct {
elem* data;//数据
int length;//表长
}SqList;
*/
void CreateList(SqList* L, int n) {
L = (elem*)malloc(MAXSIZE * sizeof(elem));
for (int i = 0; i < n; i++) {
printf("请按先后输入指数和系数:\n");
scanf("%d %lf",L->data[i].expn,L->data[i].coef);
L->length++;
}
}
void InitList(SqList* L) {
L = (elem*)malloc(MAXSIZE * sizeof(elem));
L->length = 0;
}
void InsertList(SqList* L, int index, elem e) {
if (index > (L->length + 1) || index < 1||L->length==MAXSIZE) {
printf("ERROR\n");
}
else {
for (int i = L->length - 1; i > index - 1; i--) {
L->data[i + 1] = L->data[i];
}
L->data[index - 1] = e;
L->length++;
}
}
void ListDelete(SqList* L, int index) {
if (index > L->length || index < 1) {
printf("ERROR\n");
}
else {
for (int i = index-1; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
}
}
int LocteElem(SqList* L, elem e) {
int isPrime = 0;
for (int i = 0; i < L->length - 1; i++) {
if (e.expn == L->data[i].expn&&e.coef==L->data[i].coef) {
printf("该元素位于第%d位\n", i + 1);
isPrime = 1;
break;
}
}
if (!isPrime) {
printf("表中无元素\n");
}
}
void GetElem(SqList* L, int index) {
if (index<1 || index>L->length) {
printf("ERROR\n");
}
else {
printf("指数为%d 系数为%lf\n", L->data[index - 1].expn, L->data[index - 1].coef);
}
}
#endif
试着写了一个顺序表,为什么会出现这种情况,以及还有哪些问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 技术专家团-小桥流水 2022-03-24 17:32关注
修改后运行结果:
main.c代码:
#include "list.h" #include <stdio.h> int main() { SqList k ; int pos; elem e; InitList(&k); //这里先初始化链表 CreateList(&k, 5); ShowList(&k); //插入 printf("请输入需要插入的位置和数据:"); scanf("%d %d %lf", &pos, &e.expn, &e.coef); InsertList(&k, pos, e); printf("插入后链表:\n"); ShowList(&k); //删除 printf("请输入需要删除的位置:"); scanf("%d", &pos); ListDelete(&k, pos); printf("删除后链表:\n"); ShowList(&k); return 0; }
list.h代码:
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef _LIST_H_ #define _LIST_H_ #define MAXSIZE 100 typedef struct data { int expn;//指数 double coef;//系数 }elem; typedef struct { elem* data;//数据 int length;//表长 }SqList; void CreateList(SqList* L, int n); //创建顺序表 void InitList(SqList* L); //初始化顺序表 void InsertList(SqList* L, int index, elem e); //在index处插入 void ListDelete(SqList* L, int index); //删除index处元素 int LocteElem(SqList* L, elem e); //查找数据e在顺序表里的位置 void GetElem(SqList* L, int index); //输出index处的值 void ShowList(SqList* L); //显示链表 #endif
list.c代码:
#include "list.h" #include <stdio.h> #include <stdlib.h> void CreateList(SqList* L, int n) { //L = (elem*)malloc(MAXSIZE * sizeof(elem)); //修改 已经有InitList函数了,这里就不需要再申请内存了 for (int i = 0; i < n; i++) { printf("请按先后输入指数和系数:\n"); scanf("%d %lf", &L->data[i].expn, &L->data[i].coef); //修改 读数据需要用地址 //L->length++; } L->length = n; //再这里直接赋值就可以了 } void InitList(SqList* L) { L->data = (elem*)malloc(MAXSIZE * sizeof(elem));// 修改 L = (elem*)malloc(MAXSIZE * sizeof(elem)); L->length = 0; } void InsertList(SqList* L, int index, elem e) { if (index > (L->length + 1) || index < 1 || L->length == MAXSIZE) { printf("ERROR\n"); } else { for (int i = L->length - 1; i >= index - 1; i--) //修改 这里是i >= index -1,否则 index-1位置处的数据无法后移 L->data[i + 1] = L->data[i]; } L->data[index - 1] = e; L->length++; } void ListDelete(SqList* L, int index) { if (index > L->length || index < 1) { printf("ERROR\n"); } else { for (int i = index - 1; i < L->length - 1; i++) { L->data[i] = L->data[i + 1]; } L->length--; } } int LocteElem(SqList* L, elem e) { int isPrime = 0; for (int i = 0; i < L->length - 1; i++) { if (e.expn == L->data[i].expn && e.coef == L->data[i].coef) { printf("该元素位于第%d位\n", i + 1); isPrime = 1; break; } } if (!isPrime) { printf("表中无元素\n"); } return isPrime; } void GetElem(SqList* L, int index) { if (index<1 || index>L->length) { printf("ERROR\n"); } else { printf("指数为%d 系数为%lf\n", L->data[index - 1].expn, L->data[index - 1].coef); } } void ShowList(SqList* L) { int i; for (i = 0; i < L->length; i++) { printf("(%d,%lf) ", L->data[i].expn ,L->data[i].coef); } printf("\n"); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 Revit2020下载问题
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大