任务描述 :前几个的实现是线性表的基本操作 现在实现的是链表基本操作的实现。基本上是建立新结点 结点的长度 删除结点 插入结点 合并结点 显示结点的功能。
#include<iostream> using namespace std; typedef int status; //存储结构的类型定义 返回函数的状态结果代码 typedef int ElemType; //数据元素/結点的表示 这个是用户自定义的数据类型 用于结点 typedef struct LNode{ ElemType data;//值域 struct LNode *next;//这个链表类中的指针域 }*LinkList;//*LinkList用于定义头指针 void CreatList(LinkList &L,int n) { L =(LinkList)malloc(sizeof(LNode));//系统动态生成一个LNode的结点 同时将该结点的起始位置赋给指针变量 L->next = NULL;//很明显 这是一个头结点 LinkList p; LinkList s; s = L; for(int i =n;i>0;--i) { p = (LinkList)malloc(sizeof(LNode));//生成新结点 cin>>p->data; p->next =s->next; s->next = p; s = s->next; } } int listlength(LinkList &L) { LinkList p; p=L; int j =0; while(p->next!=NULL) { p = p->next; ++j; } return j; } void uniform(LinkList &La,LinkList &Lb,LinkList &Lc) { LinkList pa ; LinkList pb ; LinkList pc ; Lc =(LinkList)malloc(sizeof(LNode)); pa = La->next;//将头结点指向的下一个结点的指针给pa pb = Lb->next; pc = La;//这里比较关键 由于刚开始Lc链表没有值 那么首先它的指针指向是La Lc = pc;//这时的指针也是指向Lc的 while(pa&&pb) { if(pa->data<=pb->data) { pc->next = pa;//pa的指针指向pc的下一个结点 pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next =pa?pa:pb; } void ListDelete(LinkList &L,int i) { LinkList p; p=L;//头结点的指针给p int j =0; while(p&&j<i-1) { p = p->next; ++j; } p->next = p->next->next; } void ListInsert(LinkList &L,int i,ElemType e) {//在带头结点的单链表L中第i个位置之前插入元素e LinkList p; LinkList s; p=L; int j = 0; while(p&&j<i-1) { p=p->next; ++j; }//此时的p已经定好要插入的位置了 s = (LinkList)malloc(sizeof(LNode)); s->data =e; s->next = p->next; p->next =s; } void display(LinkList &L) { LinkList p; p= L; int j = 0; while(j<listlength(L)) { p = p->next; cout<<p->data<<" "; } } void main() { LinkList La; LinkList Lb; LinkList Lc; cout<<"来吧 输入数据吧!"<<endl; CreatList(La,4); cout<<"不够爽 在来一波"<<endl; CreatList(Lb,7); uniform(La,Lb,Lc); cout <<endl; display(Lc); }