主函数里,//la 为头结点的指针

2020-01-05 19:23 来源:未知

p=la;//la 为头结点的指针
i=0;//位序
  while (p->next!=null)  
{
        p=p->next,i++;
}

用单链表实现集合的交、并、差运算 5C
三段式c++
主函数里,
1.如何调用指针函数(下方蓝色字体函数如何调用)。
2.函数中的参数(指针类型的对象,应该如何传入)。
3.如何让指针对象初始化

/*
数据结构上机实验1:有序单链表合并10.29
*/
#include<stdio.h>
#include<stdlib.h>
#define OK 1    //正常
#define ERROR 0 //错误
typedef int Status; //定义返回值类型
typedef int Elemtype; //定义数据元素类型
typedef struct LNode
 {
  Elemtype data;
  struct LNode *next;
 }LNode,*Linklist;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

 p->next!=null或p=null的相同点:都可用来判断是否为 空表 或 表尾
区别:p->next!=null,i∈[0,n]
        p!=null             i∈[0,n+1]    

“LinlList.h”
#define SLIST
template
struct Node{
T data;
struct Node *next;
};
template
class LinkList
{
public:
LinkList();
LinkList(T a[],int n); //尾插
LinkList(int n,T a[]);
~LinkList();
int GetLength();
T Get;
void Set(int i,T x);
int Locate;
void Insert (int i,int j,T a[]);
T Delete;
void PrintLinkList();
Node *GetFirst();
Node *Union(LinkList *la,LinkList *lb);
Node *Intersection(LinkList *la,LinkList *lb);
Node *Difference(LinkList *la,LinkList *lb);
Node *Judge(LinkList *la,LinkList *lb);
private:
T data;
Node *first;
};

 Status Createlist_L(Linklist &L,int n)
 {
  int k;
  Linklist p;
   printf("请按递减顺序输入%d个元素:",n);
  L=(Linklist)malloc(sizeof(LNode));
  if(L==NULL)
 return ERROR;   //头插链表
  L->next=NULL;  //将最后一个节点的指针域赋空
  for(k=n;k>0;k--)
  {
   p=(Linklist)malloc(sizeof(LNode));
   if(p==NULL)
    return ERROR;
   scanf("%d",&p->data);
   p->next=L->next;
   L->next=p;
  }//for
return OK;
 }//status建立n个节点的单链表

typedef struct node{
    int data;
    struct node *next;
    }link,*linkptr;
void creatlink(linkptr &la,int n)
{
    linkptr q1,q2;
    int i;
    for(i=0;i<n;i++)
    {
        q1=(linkptr)malloc(sizeof(link));
        if(!q1)printf("error");
        scanf("%d",&q1->data);
        if(i==0)
        {
            //q1->next=NULL;
            la=q2=q1;
        }
        else
        {
            q2->next=q1;
            q2=q1;
        }

“LinkList.cpp”
#include "LinkList.h"
#include
#include
using namespace std;
template
LinkList::LinkList()
{
first=new Node;
first->next=NULL;
}
template
LinkList::LinkList(T a[],int n)
{
first=new Node;Node *s;
first->next=NULL;
for (int i=0;i {
s=new Node; s->data=a[i];
s->next=first->next;first->next=s;
}
}
template
LinkList::LinkList(int n,T a[])
{
first=new Node;first->next=NULL;
Node *r=first,*s;
for(int i=0;i {
s=new Node;s->data=a[i];r->next=s;r=s;
}
r->next=NULL;
}
template
LinkList::~LinkList()
{
Node *p=first;
while
{
Node *q=p;
p=p->next;delete q;
}
}
template
int LinkList::GetLength()
{
Node *p=first; int j=0;
while
{
p=p->next;j++;
}
return j;
}
template
T LinkList::Get
{
Node *p=first->next;int j=1;
while(p&&jnext;j++;}
if throw"位置錯誤";else return p->data;
}
template
void LinkList::Set(int i,T x) //把i位置的元素用X替代
{
Node
p=first->next; int j=1;
while (p&&j*next;j++;
}
if throw "位置error";
else p->data=x;
}**

void Display(Linklist &L)
 {
  Linklist p=L;
  p=p->next; //指针指到有数据的第一个节点
  while(p!=NULL)
  {
    printf("%d,",p->data);
      p=p->next;
  }

        if(i==n-1)
        q2->next=NULL;
    }

/*
template
void LinkList::Insert(int i,T x)
{
Node *p=first;int j=0;
while (p&&i-1)
{

 }//输出单链表

}
void insert(linkptr &la,int x,int i)
{
    linkptr q1,q2,p;
    int k=1;
    q1=q2=la;
    p=(linkptr)malloc(sizeof(link));
    p->data=x;
    if(i==1)
    {
        p->next=la;
        la=p;
    }
    else
    {
           while(k<i-1)
            {
                q2=q1->next;
                q1=q2;
                k++;
            }//找到要插入的上一个节点q1、q2指向它
            q2=q1->next;
            q1->next=p;
            p->next=q2;
            //printf("n");
    }
}
void delink(linkptr &la,int j)
{
    linkptr q1,q2;
    int k=1;
    q1=q2=la;
    if(j==1)
    {
        la=q1->next;
        free(q1);
        //q1=q2=la;
    }
    else
    {
           while(k<j-1)
            {
                q2=q1->next;
                q1=q2;
                k++;
            }//找到要删除的上一个节点

p=p->next;j++;
}
ifthrow"位置出錯";
else{ Node *s=new Node;
s->data=x;s->next=p->next;p->next=s;
}

void Unlist(Linklist &la,Linklist &lb)
{
 Linklist ha,h1,hb,temp;  //定义h1,ha两个相邻节点指针,便于在两者中间进行插入操作;temp用于暂时指向要被插入或删除的节点
 h1=ha=la;  
 ha=ha->next;
 hb=lb->next;
 while(ha!=NULL&&hb!=NULL)
 {
  if(hb->data>ha->data)
  {
   h1=h1->next;
   ha=ha->next;
  }  //大于时h1,ha向后以一个节点作比较
  else
   if(hb->data<ha->data)  //此时插入到h1所指节点后面
   {
       h1->next=hb;
       temp=hb;   //将b节点的地址付给temp,便于hb后移地址不丢失
       hb=hb->next; //hb后移
       temp->next=ha; 
       h1=temp;    //把temp节点插入到h1后
   }
     else
   if(ha->data==hb->data)
   {
                temp=hb->next;
       free(hb);  //释放hb空间
       hb=temp->next;  //hb后移一节点
       h1->next=temp;
       temp->next=ha;
   }
 //有值相同的节点删去h1指向hb的下一个节点,进入比较
 }
 if(ha==NULL&&hb!=NULL)
     h1->next=hb;    //当b节点有剩余时,直接连到la末尾极
}//合并两个有序链表

            q2=q1->next->next;
            free(q1->next);
            q1->next=q2;
            //q1=q2=la;
            //printf("n");
    }
}
void exchange(linkptr &la,int n)
{
    linkptr q1,q2,p,q;
    p=q=(linkptr)malloc(sizeof(link));
    p->next=la;
    int k=1;
    while(k<n)
    {
        q1=q2=la;
        q2=q1->next;
        while(q2->next!=NULL)
        {
        q1=q2;
        q2=q1->next;
        }//让q2指向最后一个,q1址前一个;
        q1->next=NULL;//
        q2->next=la;
        p->next=q2;//
        p=q2;
        k++;
    }//进行n-1次,
    //实现调换
    la=q->next;
}
void view(linkptr p)
{
    linkptr q1,q2;
    q1=q2=p;
    q2=q1->next;
    while(q2!=NULL)//让q1来遍历链表
    {
        printf("%d ",q1->data);
        q1=q2;
        q2=q1->next;//移动指针
    }
    printf("%d ",q1->data);
    printf("n");
}
void uninlink(linkptr &la,linkptr lb)
{
    linkptr p,m,n;
    //q1=la;p1=lb;q2=q1->next;p2=p1->next;
    m=n=p=(linkptr)malloc(sizeof(link));
    m->next=NULL;
    while(la!=NULL&&lb!=NULL)//
    {

}*/

 int main()
 {
  int m,n;
  Linklist la,lb;
  printf("请输入链表a的长度:n");
  scanf("%d",&m);
  printf("请输入链表b的长度:n");
  scanf("%d",&n);
  Createlist_L(la,m);  //建立单链表
  Createlist_L(lb,n);
  Unlist(la,lb);
  Display(la);
     return 0;
 }  

            if(la->data<lb->data)
            {
                m->next=la;
                n=m->next;
                m=n;
                la=la->next;
            }
            else
            {
                m->next=lb;
                n=m->next;
                m=n;
                lb=lb->next;
            }
    }

template
void LinkList::Insert(int i,int j,T a[])
{
Node *p=first;int k=0;
while (p&&i-1)
{

参考书目:清华大学<数据结构>

  if (la==NULL)
    {
       m->next=lb;
    }
  else
       m->next=la;
    la=p->next;
}
void serch(linkptr la,int y,int n)
{
    linkptr q1,q2;
    int k=1;
    int shu=0;
    q1=q2=la;
    q2=q1->next;
    while(k<n)//让q1来遍历链表
    {
        if(q1->data==y)
        {
           printf("找到,%d在第%d个位置n",y,k);
           shu=1;
        }
        q1=q2;
        q2=q1->next;//移动指针
        k++;

p=p->next;k++;
}
永利平台娱乐,ifthrow"位置出錯";
else{ Node *s=new Node;
s->data=a[j];s->next=p->next;p->next=s;
}

    }
    if(q1->data==y)
    {
        printf("找到,%d在第%d个位置n",y,k);
        //k++;
        shu=1;
    }
    if(shu==0)
    {
       printf("没找到n");
    }

TAG标签:
版权声明:本文由永利平台娱乐发布于IT交流,转载请注明出处:主函数里,//la 为头结点的指针