链式线性表源码

来源:互联网 发布:程序员女生性格 编辑:程序博客网 时间:2024/05/17 23:46

链式线性表源码 (c++)

////Description:自定义链式线性表//#include <iostream>#include <malloc.h> using namespace std;typedef  int  ElemType;typedef  int  Status; //--------链式线性表定义--------typedef struct LNode{ElemType data;struct LNode *next;}LNode, *LinkList;//----------全局变量----------LNode    *p=NULL, *q=NULL;LNode    *s=NULL;LNode    *pa=NULL;LNode    *pb=NULL;LNode    *pc=NULL;int j=0;static int  num=0;//---------------创建链表-----------------------void CreateList_L(LinkList &L, int n){////####逆位序输入n个元素的值,建立###带表头结点##的单链线性表LL = (LinkList)malloc(sizeof(LNode));L->next = NULL;for (int i = n; i > 0; i--){p = (LinkList)malloc(sizeof(LNode));//-----cout << "\n请输入第" << i << "个结点的值\t";cin >> (p->data);p->next = L->next;L->next = p;}cout << endl;}//---------链式线性表中查找第i个结点的值------------Status GetElem_L(LinkList L, int i, ElemType &e){if (i <= 0 || i > num){cout << "\t查找位置不合法!" << endl;return 0;}//-------------------p = L->next;  ///------------------j = 1;        ///------------------while (p&&j<i){p = p->next;++j;}if (!p || j>i)return 0;e = p->data;return 1;}//------------------链式线性表 合并非递减有序链表---------void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc){//已知单链线性表La和Lb的元素按值非递减排列//归并La和Lb得到新的单链线表Lc,Lc的元素也按值非递减排列pa = La->next;pb = Lb->next;Lc = pc = La;//用La头结点作为Lc的头结点while (pa&&pb){if (pa->data <= pb->data){pc->next = pa;pc = pa;pa = pa->next;}else{pc->next = pb;pc = pb;pb = pb->next;}}pc->next = pa ? pa : pb;free(Lb);}//--------------------链式线性表 插入-----------------Status ListInsert_L(LinkList &L, int i, ElemType e){if (i <= 0 || i > num + 1){cout << "\t插入位置不合法!" << endl;return 0;}//-------------------p = L;j = 0;while (p&&j<i - 1){p = p->next;j++;}if (!p || j>i - 1)return 0;s = (LinkList)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;num++;//--------return 1;}//--------------------链式线性表 删除-----------------Status ListDelete_L(LinkList &L, int i, ElemType &e){if (i <= 0 || i > num){cout << "\t删除位置不合法!" << endl;return 0;}//-------------------p = L;j = 0;while (p->next&&j<i - 1){p = p->next;j++;}if (!(p->next) || j>i - 1)return 0;q = p->next;p->next = q->next;e = q->data;free(q);num--;//--------return 1;}//--------------------链式线性表 输出-----------------void output(LinkList &L, int n){cout << "\n\n当前各结点值为:" << endl;p = L->next;for (int i = 1; i <= n; i++){cout << "第" << i << "个结点的值为\t" << (p->data) << endl;p = p->next;}}//-------------主函数---------------void main(){cout << "\n\t======================链式线性表操作===========\n";cout << "-------------------------初始化---------------------------" << endl;cout << "请输入初始时链接线性表中结点的个数" << endl;cin >> num;LinkList L;CreateList_L(L, num);output(L, num);cout << "--------------------------查找----------------------------" << endl;int i;cout << "请输入欲查找的结点所处的次序\t" << endl;cin >> i;ElemType s;GetElem_L(L, i, s);cout << "所查找的第" << i << "个结点的值为\t " << s;output(L, num);//----cout << "--------------------------插入----------------------------" << endl;cout << "请输入欲插入的结点所处的位置和相应的数值\n";cin >> i >> s;ListInsert_L(L, i, s);output(L, num);cout << "--------------------------删除-----------------------------" << endl;cout << "请输入欲删除的结点所处的位置\t" << endl;cin >> i;ListDelete_L(L, i, s);cout << "所删除的元素位置为" << i << ",其值为\t" << s;output(L, num);cout << "----------------------合并非递减有序链表--------------------" << endl;cout << "\n请输入初始时 *非递减* 链式线性表 La 中结点的个数" << endl;int num_La;cin >> num_La;LinkList La;CreateList_L(La, num_La);cout << "\n请输入初始时 *非递减* 链式线性表 Lb 中结点的个数" << endl;int num_Lb;cin >> num_Lb;LinkList Lb;CreateList_L(Lb, num_Lb);cout << "\n La中" << endl;output(La, num_La);cout << "Lb中" << endl;output(Lb, num_Lb);LinkList Lc;MergeList_L(La, Lb, Lc);num = num_La + num_Lb;cout << "\n\n合并后 *非递减* 链式线性表Lc中" << endl;output(Lc, num);}

原创粉丝点击