⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form.txt

📁 掌握线形表的基本操作在顺序和链表这两种存储结构上的实验
💻 TXT
字号:
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#define STU_SIZE 100
#define n  20
#define ERROR 0
#define OK 1
typedef int status;
struct student   
   {
   char name[20];
   long int  non;
   float sco;
   int age;
   }stu[n];
typedef struct 
   {struct student   stu[n];
    struct student *stuhead;
    int length;
   }sqlist;
status  init_list (sqlist &l)
{
  l.stuhead=(struct student*) malloc (STU_SIZE*sizeof (struct student));
  if(!l.stuhead) exit (ERROR);
  l.length=0;
  return OK;
}
void printlist(sqlist l)
{
int k;
for (k=0;k<l.length;k++)
  { cout <<"位置"<<"        "<<"name"<<"       "<<"non"<<"       "<<"age"<<"       "<<"sco\n";
  cout <<k+1<<"          "<<l.stu[k].name<<"           "<<l.stu[k].non<<"          "<<l.stu [k].age<<"         "<<l.stu[k].sco<<endl;
   }
}
int listinsert (sqlist &l,int i,struct student e)
{ 
  struct student *p,*q;
  cout <<
  cout <<"name\n";
  cin  >>e.name;
  cout <<"non\n";
  cin >>e.non  ;
  cout <<"age\n";
  cin >>e.age;
  cout <<"sco\n";
  cin >>e.sco ;
  if (i<0||i>l.length+1) return ERROR;
  if (i==l.length+1)
     {
     l.stu[l.length]=e;
     ++l.length;
     }
  else
  {
     p=&(l.stu[l.length-1]);
  q=&(l.stu[i-1]);
  for(;p>=q;p--)
  {
    *(p+1)=*p;
    *q=e;
    ++l.length;
  }
  }
   return OK;
  }
    int listdelete (sqlist &l,int i,struct student &e)
  {
	  struct student  *p,*q;
	  if (i<1||i>l.length)return ERROR;
if(i==l.length)
  { 
   e=l.stu[l.length-1];
   --l.length;
   }  
else
{
	  p=&(l.stu[i-1]);
	  q=&(l.stu[l.length-1]);
        e=*p;
	  for (;p<q;p++)
	    {
		  *p=*(p+1);
	    }
         --l.length;
  }
           cout <<"您删除的数据为:\n";
           cout <<"name"<<"       "<<"non"<<"       "<<"age"<<"       "<<"sco\n";
           cout<<e.name<<"         "<<e.non<<"         "<<e.age<<"         "<<e.sco<<endl;
  }
main()
{
  typedef int status;
  struct student  e;
  int i;
  int j;
  int m;
  sqlist l;
  init_list (l);
loop: cout<<"选择您要执行的操作(0为插入,1为删除,其他为结束程序):";
  cin >>j;
    switch(j)
	{
	case 0: cout<<"要从当前位置插入么?(0为是,1为否):"; 
             cin>>m; 
             switch(m)
             {case 0:
                      i=l.length+1;     
                      break;
              case 1:
                      cout<<"输入要插入的数据位置:";
                      cin>>i;
                      break;
             default:
                      return ERROR;
             }
	        listinsert(l,i,e);
	        cout<<"显示当前列表:\n";
              printlist(l);
		goto loop;
		break;
	case 1:
             cout<<"输入您要删除的数据位置:";
             cin>>i;
		listdelete(l,i,e);
		cout<<"显示当前列表:\n";
		printlist(l);
		goto loop;
		break;
	default:
		cout <<"程序结束\n";
        return  OK;
  }
}

2
#include<iostream.h>
#include<stdlib.h>
#include<string.h>


#define ERROR 0
#define OK    1
#define N  10
#define _SIZE  20

typedef int status;

typedef struct ployn{
int coaf;
int expn;
}ployn;

typedef struct lnode{
int length;
struct lnode *next;
struct ployn ployn;
}lnode,*linklist;

status initlist (linklist &l){
l=(linklist)malloc(_SIZE*sizeof(lnode));
if(!l->next) exit (ERROR);
else return OK;
}

status Keyin (linklist &l){
int n;
int i;
struct lnode *p;
p=l->next;
cout <<"输入多项式的项数:";
cin >>n;
l->length=n;
for(i=1;i<=n;i++)
  {
   cout<<"输入多项式第"<<i<<"个元素的系数:";
   cin>>p->ployn.coaf;
   cout<<"输入多项式第"<<i<<"个元素的指数:";
   cin>>p->ployn.expn;
   p=p->next;
   }
   return OK;
}

status addployn(linklist &l1,linklist &l2,linklist &l3){
struct lnode *p1;
p1=l1->next;
struct lnode *p2;
p2=l2->next;
struct lnode *p;
p=l3;
l3->length=l1->length+l2->length;
while(p1&&p2)
{
if(p1->ployn.expn<p2->ployn->expn)
{
p->next->ployn=p1->ployn;
p=p->next;
p1=p1->next;
}
else if(p2->ployn.expn<p1->ployn.expn)
{
p->next->ployn=p2->ployn;
p=p->next;
p2=p2->next;
}
else {
p->next->ployn.coaf=p1->ployn->coaf+p2->ployn.coaf;
p->next->ployn.expn=p1->ployn->expn;
p=p->next;
p1=p1->next;
p2=p2->next;
--l3->length;
}
}
p->next=p1?p1:p2;
free(l2);
return OK;
}

status changelnode (linklist &l){
struct lnode *p;
struct lnode *q;
q=l;
int i,n,m;
cout<<"输入您要修改的项位置:";
cin>>n;
for(i=1;i<n;i++)
q=q->next;
p=q->next;
cout<<"您要修改的项为第"<<i<<"项:"<<p->ployn->coaf<<"x^"<<p->ployn.expn<<endl;
cout<<"1为删除操作,2为修改操作,请选择:";
cin>>m;
switch(m){
case 1: 
   q->next=p->next;
   break;
case 2:
cout<<"输入修改后元素的系数:";
   cin>>p->ployn.coaf;
cout<<"输入修改后元素的指数:";
   cin>>p->ployn.expn;
   break;
default:
return ERROR;
}
return OK;
}
status printlist(linklist &l) {
struct lnode *p;
int i;
p=l->next;
for(i=1;i<=l->length;i++,p=p->next)
{  if (p!=l->next&&p->ployn->coaf>0)cout<<"+";
   cout<<p->ployn.coaf;
   cout<<"x^"; 
   cout<<p->ployn.expn;
}
return OK;
}

 
main(void)
{
linklist l1;
linklist l2;
linklist l3;
initlist (l1);
initlist (l2); 
initlist (l3); 
int k,j;
LOOP:cout<<"         以下是操作列表:\n";
cout<<"         1为输入多项式:\n";
cout<<"         2为多项式相加:\n";
cout<<"         3为修改多项式:\n";
cout<<"         其它为结束程序!\n";
cout<<"         请选择您要执行的操作:";
cin>>k;
switch(k)
{
case 1:{
Keyin (l1);
cout<<"显示多项式1:\n";
printlist (l1);
cout<<endl;
Keyin (l2);
cout<<"显示多项式2:\n";
printlist (l2);
cout<<endl;
goto LOOP;
break;}

case 2:{
addployn(l1,l2,l3);
cout <<"显示结果多项式:\n";
printlist (l3);
cout<<endl;
goto LOOP;
break;}

case 3:{
cout<<"您要修改第";
cin>>j;
cout<<"个多项式\n";
switch(j){
case 1:
   {changelnode(l1);
   break;}
case 2: 
   {changelnode(l2);
   break;}
default:return ERROR;
}
cout<<endl;
goto LOOP;
break;}

default:
return ERROR;
}
return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -