大众信息网

如何建立线性链表-----数据结构

关注:96  答案:2  手机版
解决时间 2021-02-26 07:21
完整的可运行的程序 使用VC++实现
最佳答案
#include
#include //头文件
#include
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////
typedef struct node //结构体定义
{
float date; //系数项
int exp; //X的次幂
struct node *next; //指向下一节点的指针
}LNode,*LinkList; //两个变量一个定义节点另一个定义表头
////////////////////////////////////////////////////////////////////////////////////
LinkList Creat_LinkList(char x);
int Length_LinkList(LinkList L);
Out_LinkList(LinkList L); //函数声明
LinkList Del_LinkList(LinkList H3);
LinkList Add_LinkList(LinkList H1,LinkList H2);
///////////////////////////////////////////////////////////////////////////////////
LinkList Creat_LinkList(char x) //创建多项式的链表函数
{
int n,i;
//char A;
LinkList L=NULL; //头节点指针
LNode *p; //节点指针
float num;
cout<<"请输入多项式中x的最高次数:";
cin>>n;
for(i=0;i<=n;++i)
{
cout<<"请输入多项式的系数"< cin>>num;
p=(struct node*)malloc(sizeof(struct node));//分配内存
p->date=num;
p->exp=i;
p->next=L;
L=p;
}
return L; //返回链表的头指针
}
//////////////////////////////////////////////////////////////////////////////////
int Length_LinkList(LinkList L) //计算链表长度的函数
{
LNode *p=L; //p指向头结点
int j=0;
while(p->next)
{
p=p->next;
j++;
} //p所指的是第 j 个结点
return j; //返回链表长度
}
//////////////////////////////////////////////////////////////////////////////////
LinkList Add_LinkList(LinkList H1,LinkList H2) //系数相加函数
{
int m,n,i;
LNode *p,*s;
LinkList L;
p=H1;
s=H2;
n=Length_LinkList(H1); //获取H1链表长度
m=Length_LinkList(H2); //获取H2链表长度
if(n>=m) //链表长度H1大于等于H2时H1=H1+H2
{
for(i=0;i p=p->next; //移动指针使指针指向向相应位置
for(i=n-m;i<=n;++i,p=p->next,s=s->next)
p->date=p->date+s->date;
L=H1;
}
else //链表长度H1小于H2时H2=H1+H2
{
for(i=0;i s=s->next; //移动指针使指针指向向相应位置
for(i=m-n;i<=m;++i,s=s->next,p=p->next)
s->date=s->date+p->date;
L=H2;
}
return L; //返回相加后的链表头指针
}
/////////////////////////////////////////////////////////////////////////////////
LinkList Del_LinkList(LinkList H3) //剔除链表中date值为零的链
{
LinkList L=NULL;
LNode *p,*s;
s=H3;
for(;s->next!=NULL;s=s->next) //将不为0的date放入新链表中
{
if(s->date!=0)
{
p=(struct node*)malloc(sizeof(struct node));
p->date=s->date;
p->exp=s->exp;
p->next=L;
L=p;
}
}
if(s->date!=0) //判断尾节点date值是否为0非0则放入新链表中
{
p=(struct node*)malloc(sizeof(struct node));
p->date=s->date;
p->exp=s->exp;
p->next=L;
L=p;
}
return L; //返回新链表表头指针
}
//////////////////////////////////////////////////////////////////////////////////
Out_LinkList(LinkList L) //链表输出函数
{
LNode *p;
p=L;
cout<<"两多项式之和为:";
cout<date<<"+"; //输出头节点的值
for(p=p->next;p->next!=NULL;) //输出头节点和尾节点之间的值
{
cout<date<<"(x"<exp<<")"<<"+";
p=p->next;
}
cout<date<<"(x"<exp<<")"; //输出尾节点的值
return 0;
}
//////////////////////////////////////////////////////////////////////////////////
void main()
{
LinkList L1,L2,L3,L4;
//LNode *p;
L1=Creat_LinkList('A'); //调用创建多项式链表函数
L2=Creat_LinkList('B'); //调用创建多项式链表函数
L3=Add_LinkList(L1,L2); //调用多项式相加函数
L4=Del_LinkList(L3); //调用剔除函数
Out_LinkList(L4); //调用输出函数
free(L1); //释放链表
free(L2);
free(L4);
}

这是一个用链表实现多项式加法的程序。同学的作业。
全部回答
#define null 0 #define type struct stu #define len sizeof(struct stu) struct stu { int data; struct stu *next; }; type * creat(int n) { struct stu *head,*pf,*pb; int i; for(i=0;idata); if(i==0) pf=head=pb; else pf->next=pb; pb->next=null; pf=pb; } return(head); } type * search(type * head,int num) { int i; type *pf,*pb; pb=head; i=0; while(pb&&inext; ++i; } printf("the search data is:%d\n",pb->data); if(!pb||i>num)printf("no data"); } type * delete(type * head,int num) { int i; type *pf,*pb; i=1; if(head==null) { printf("\nempty list!\n"); goto end;} pb=head; while (pb->next && inext; i++; } if(!pb->next||i>num-1)printf("error"); pf=pb->next; pb->next=pf->next; printf("the delet data is:%d\n",pf->data); free(pf); end: return head; } type*insert(type * head,int num,int e) { int i; type *pb ,*pf; i=0; pb=head; while(pb&&inext; i++; } if(!pb||i>num-1)printf("error"); pf=(type*)malloc(sizeof(type)); pf->data=e; pf->next=pb->next; pb->next=pf; return head; } void print(type * head) { type*pb; pb=head; printf("data\n"); while(pb!=null) { printf("%d\n",pb->data); pb=pb->next; } } main() { int n, num,e; type * head; printf("input number of node: "); scanf("%d",&n); head=creat(n); print(head); printf("input the deleted number: "); scanf("%d",&num); head=delete(head,num); print(head); printf("input the inserted number: "); scanf("%d%d",&num,&e); head=insert(head,num,e); print(head); printf("input search number:\n"); scanf("%d",num); head=search(head,num); printf("the length of the list is :"); printf("%d",n);
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!