//
HW1,9.10号截止的作业
1)demo.c能正确的删除元素,并测试。
2)补充addpoly.c程序完成多项式加法,并测试。
提示:需要补充一个新的结构体,用来存储多项式中
一项的系数和指数,注意作业截止日期是周一晚邮件主题是
“DS_XXXX(学号)_姓名_HW1”(例如,“DS_3170931001_张三_HW1”
交付demo.c、addpoly.c和程序运行结果的屏幕截图等文件,打包压缩名
称和邮件主题一致,压缩后作为附件发到邮箱。
如下
//demo.c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef double ElemType;
typedef struct list {
ElemType a[MAXSIZE + 1];
int len;
} SeqList;
SeqList * InitList();
void InitList2(SeqList **ppList);
int ListFull(SeqList *pList);
int ListEmpty(SeqList *pList);
int ListLen(SeqList *pList);
void Error(char *msg);
int GetElem(SeqList *pList, int i, ElemType *pElm);
int InsertElem(SeqList * pList, int i, ElemType elm);
int DelElem(SeqList *pList, int i, ElemType *pElm);
void PrintList(SeqList *pList);
int main() {
int i;
SeqList *pList;
ElemType x;
// ElemType a[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ElemType a[11] = {0.1, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.9};
// ElemType a[11] = {'0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
// pList = InitList();
InitList2(&pList);
for (i = 1; i <= 10; i++)
InsertElem(pList, i, a[i]);
PrintList(pList);
DelElem(pList, 4, &x);
PrintList(pList);
return 0;
}
SeqList * InitList() {
SeqList *pList;
pList = (SeqList *)malloc(sizeof(SeqList));
pList->len = 0;
return pList;
}
void InitList2(SeqList **ppList) {
*ppList = (SeqList *)malloc(sizeof(SeqList));
(*ppList)->len = 0;
}
int ListFull(SeqList *pList) {
/*
if (pList->len == MAXSIZE)
return 1;
else
return 0;
*/
return (pList->len == MAXSIZE) ? 1 : 0;
}
int ListEmpty(SeqList *pList) {
return (pList->len == 0) ? 1 : 0;
}
int ListLen(SeqList *pList) {
return pList->len;
}
void Error(char *msg) {
printf("error: %s\n", msg);
}
int GetElem(SeqList *pList, int i, ElemType *pElm) {
if (ListEmpty(pList)) {
Error("Get element from empty list");
return 0;
}
if (i < 1 || i > MAXSIZE) {
Error("Get element from illegal position!");
return 0;
}
*pElm = pList->a[i];
return 1;
}
int InsertElem(SeqList * pList, int i, ElemType elm) {
int k;
if (ListFull(pList)) {
Error("Insert element to a full list!");
return 0;
}
if (i < 1 || i > pList->len + 1) {
Error("insert element out of range!");
return 0;
}
for (k = pList->len; k >= i; k--) pList->a[k + 1] = pList->a[k];
pList->a[i] = elm;
pList->len += 1;
return 1;
}
int DelElem(SeqList *pList, int i, ElemType *pElm) {
if (ListEmpty(pList)) {
Error("delete element from an empty list");
return 0;
}
if (i < 1 || i > pList->len) {
Error("delete element out of range");
return 0;
}
*pElm = pList->a[i];
int z;
for(z=4;z<=9;z++)
{
pList->a[z]= pList->a[z+1];
}
pList->len -= 1;
return 1;
}
void PrintList(SeqList *pList) {
int i;
for (i = 1; i <= pList->len; i++)
printf("%.2lf ", pList->a[i]);
putchar('\n');
}
//demo.addpoly
#include <stdio.h>
#include <stdlib.h>
#define M 11
#define N 7
#define MAXSIZE 20
typedef struct q
{
double a;
int p
} ElemType;
typedef struct list {
ElemType a[MAXSIZE + 1];
int len;
} SeqList;
SeqList * InitList();
void InitList2(SeqList **ppList);
int ListFull(SeqList *pList);
int ListEmpty(SeqList *pList);
void Error(char *msg);
int GetElem(SeqList *pList, int i, ElemType *pElm);
int InsertElem(SeqList * pList, int i, ElemType elm);
int DelElem(SeqList *pList, int i, ElemType *pElm);
void PrintList(SeqList *pList);
void add(SeqList *A,SeqList *B,SeqList *C);
int main() {
int i, j, k;
SeqList *A, *B, *C;
ElemType a[M+1],b[N+1], x;
for (i=1;i<=M;i++)
{
a[i].a=i+0.1;
a[i].p=i;
}
for (i=1;i<=N;i++)
{
b[i].a=2*i+0.1;
b[i].p=i;
}
A=InitList();
B=InitList();
C=InitList();
for (i=1;i<=M;i++)
InsertElem(A,i,a[i]);
for (i=1;i<=N;i++)
InsertElem(B,i,b[i]);
add(A,B,C);
PrintList(C);
return 0;
}
SeqList * InitList()
{
SeqList *pList;
pList = (SeqList *)malloc(sizeof(SeqList));
pList->len = 0;
return pList;
}
void InitList2(SeqList **ppList) {
*ppList = (SeqList *)malloc(sizeof(SeqList));
(*ppList)->len = 0;
}
int ListFull(SeqList *pList) {
/*
if (pList->len == MAXSIZE)
return 1;
else
return 0;
*/
return (pList->len == MAXSIZE) ? 1 : 0;
}
int ListEmpty(SeqList *pList) {
return (pList->len == 0) ? 1 : 0;
}
int ListLen(SeqList *pList) {
return pList->len;
}
void Error(char *msg) {
printf("error: %s\n", msg);
}
int GetElem(SeqList *pList, int i, ElemType *pElm) {
if (ListEmpty(pList)) {
Error("Get element from empty list");
return 0;
}
if (i < 1 || i > MAXSIZE) {
Error("Get element from illegal position!");
return 0;
}
*pElm = pList->a[i];
return 1;
}
int InsertElem(SeqList * pList, int i, ElemType elm) {
int k;
if (ListFull(pList)) {
Error("Insert element to a full list!");
return 0;
}
if (i < 1 || i > pList->len + 1) {
Error("insert element out of range!");
return 0;
}
for (k = pList->len; k >= i; k--) pList->a[k + 1] = pList->a[k];
pList->a[i] = elm;
pList->len += 1;
return 1;
}
int DelElem(SeqList *pList, int i, ElemType *pElm) {
if (ListEmpty(pList)) {
Error("delete element from an empty list");
return 0;
}
if (i < 1 || i > pList->len) {
Error("delete element out of range");
return 0;
}
*pElm = pList->a[i];
pList->len -= 1;
return 1;
}
void PrintList(SeqList *pList) {
int i;
for (i = 1; i <= pList->len; i++)
printf("%.2lf ", pList->a[i].a);
putchar('\n');
for (i = 1; i <= pList->len; i++)
printf("%d ", pList->a[i].p);
putchar('\n');
}
void add(SeqList *A,SeqList *B,SeqList *C)
{
int i,j;
if (M>=N)
i=N;
else
i=M;
for (j=1;j<=i;j++)
{
C->a[j].a=A->a[j].a+B->a[j].a;
C->len=C->len+1;
C->a[j].p=A->a[j].p;
}
if (M>=N)
for (j=i+1;j<=M;j++)
{
C->a[j].a=A->a[j].a;
C->len++;
C->a[j].p=A->a[j].p;
}
else
for (j=i+1;j<=N;j++)
{
C->a[j].a=B->a[j].a;
C->len++;
C->a[j].p=B->a[j].p;
}
}