//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 BP神经网络控制倒立摆
- ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
- ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
- ¥30 Unity接入微信SDK 无法开启摄像头
- ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
- ¥20 cad图纸,chx-3六轴码垛机器人
- ¥15 移动摄像头专网需要解vlan
- ¥20 access多表提取相同字段数据并合并
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算