实验1__线性表的应用
print(A);
//将多项式A以链表形式存放
B=creat();
printf("B多项式为:\n\n");
print(B);
//多项式A、B求和
C=POLYADD(A,B);
printf("A多项式与B多项式的和为:\n\n");
print(C);
system("pause");
}
三、多项式乘积运算实验
p=p->next;
while(p)
{if(p->coef>0)
printf("+%f*x^%d",p->coef,p->expn);
else if(p->coef<0)
printf("%f*x^%d",p->coef,p->expn);
p=p->next;}
}
polynomial reverse(polynomial l)
{datatype data[MAXSIZE];/*静态线性表*/
int last;/*表的实际长度*/
}seqlist;/*顺序表的类型名*/
(2)建立顺序表时可利用随机函数自动产生数据。
(3)注意问题
①插入、删除时元素的移动原因、方向及先后顺序。
②不同的函数形参与实参的传递关系。
(4)链表类型定义
if (p->next->coef>0)
printf("+");
p=p->next;
}
while(p!=head);
printf("\n\n");
}
//主函数
main()
{
struct pnode *A,*B,*C;
//将多项式A以链表形式存放
A=creat();
printf(" A多项式为:\n\n");
}
p2->next=head;
return(head);
}
//编写两多项式求和的函数
struct pnode *POLYADD(A,B)
struct pnode *A,*B;
{
//请补充完成
}
//打印输出多项式
void print(struct pnode *head)
{
struct pnode *p;
(2)已知有两个多项式Pn(x)和Qm(x),基于链表设计算法实现Pn(x)+Qm(x)运算,而且不重新开辟存储空间。
基于链表编程实现多项式乘法运算
2、实验要求:
(1)要求用静态分配的一维数组和动态分配的一维数组来完成实验题目。分析静态分配的一维数组和动态分配的一维数组在顺序表基本操作实现上的共同点和区别。
(2)熟悉链表及其运算的实现。
自己编写实现函数;
对所编写的算法进行时间复杂度分析。
实验 、 必做,实验 选做。
3、实验预备知识
(1)复习C语言相关知识(如:结构体、用typedef自定义类型、函数)。
(2)阅读顺序表与链表的类型定义和相应的插入、删除、查找等基本操作。
4、实验环境
(1)一台运行 Windows 2000/XP 操作系统的计算机。
void create_seqlist(seqlist *l,int n)/*输入n个整数,建立一个顺序表L*/
{
int i;
l->last=n;
for(i=0;i<n;i++)
l->data[i]= rand()%100;
}
void print_seqlist(seqlist l)/*输出顺序表L中各元素的值*/
//printf("\n该多项式为:\n\n",n);
p=head->next;
if(head->next!=NULL)
do
{
if(p->exp==0)printf("%f",p->coef);
else if (p->exp==1)printf("%fX",p->coef);
else
printf("%fX^%d",p->coef,p->exp);
{
int i=0;
for(i=0;i<st;i++)
printf("%d ",l.data[i]);
printf("\n");
}
void insert_seqlist(seqlist *l,int i,datatype x)/*在顺序表L的第i个位置插入元素x*/
{
int j;
for(j=l->last-1;j>=i;j--)
scanf("%f,%d",&s,&p->expn);
p->coef=s;
p->next=q->next;q->next=p;q=p;}
return(head);}
void print(polynomial head)
{term *p;
p=head->next;
printf("%f*x^%d",p->coef,p->expn);
#include <stdlib.h>
#define LEN sizeof(struct pnode)
//定义链表结点类型
struct pnode
{
float coef;
int exp;
struct pnode *next;
};
int n;
struct pnode *creat()
{
struct pnode *head,*p1,*p2;
实验一线性表的应用
一、实验教学目的
1、熟悉将算法转换成程序代码的过程。
2、了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。
3、熟悉链表数据结构的定义和插入、删除等基本操作,会使用链表的基本操作解决一些实际问题
二、实验教学内容
1、实验题目
(1)用C语言数组实现顺序表,并在顺序表上实现:①在第3个位置插入666;②将第8个元素删除;③在顺序表中查找值为65的元素。
}
void main()
{seqlist l;int i;
create_seqlist(&l,10);
print_seqlist(l); /*第1步*/
insert_seqlist(&l,3,666);
print_seqlist(l); /*第2步*/
delete_seqlist(&l,8);
print_seqlist(l); /*第3步*/
/*一、顺序表运算实验*/
#include"stdio.h"
#include"stdlib.h"
#define MAXSIZE 100
typedef int datatype;
typedef struct
{datatype data[MAXSIZE];
int last;
}seqlist; /*顺序表类型定义*/
(2)选用turbo c、visual c++、delphi、c++ builder或visual basic等任何一种语言。
5、实验说明
(1)顺序存储定义
#define MAXSIZE 100/*表中元素的最大个数*/
typedef int datatype;/*元素类型*/
typedef struct
{term *head, *p,*q;
int i;
float s;
head=(polynomial)malloc(sizeof(term));
head->next=NULL;head->coef=0.0;head->expn=-1;
q=head;
for(i=n;i>0;i--){
p=(polynomial)malloc(sizeof(term));
scanf("%f,%d",&p1->coef,&p1->exp);
while (p1->exp!=-1)
{
n=n+1;
if(n==1)head->next=p1;
else p2->next=p1;
p2=p1;
p1=(struct pnode *)malloc(LEN);
scanf("%f,%d",&p1->coef,&p1->exp);
{polynomial p,q;
p=l->next;l->next=NULL;
while(p)
{q=p->next;
p->next=l->next;l->next=p;p=q;}
return(l);}
polynomial *multiply(polynomial f,polynomial g)
{
//请自己编程补充
l->data[j+1]=l->data[j];
l->data[i]=x;
l->last+=1;
}
void delete_seqlist(seqlist *l,int i)/*删除顺序表L中第i个元素*/
{
int j;