线性表的基本应用
一、 实验目的
1.掌握使用线性表解决一下具体问题。
二、 实验内容及要求
i.
实现有序集的并,差操作。
(1) *利用算法5建立两个非递减有序表A和B,并把它们合并成一个非递减有序表C。
(2) 在主函数中设计一个简单的菜单,分别测试上述算法。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node *next;
}Lnode,*LinkList;
Status Init_Linklist(LinkList &L) {
L = (LinkList) malloc(sizeof(Lnode));
if (!L) return ERROR;
L->next = NULL;
return OK;
}
/*在有序单链表中插入元素,链表仍然有序,插入成功返回OK,插入失败返回ERROR*/
Status Insert_Linklist(LinkList L, int x) {
LinkList p, q;
p = L;
q = p->next;
while (q) {
if (q->data > x) {
LinkList s = (LinkList) malloc(sizeof(Lnode));
s->data = x;
s->next = q;
p->next = s;
return true;
}
p = q;
q = q->next;
}
LinkList s = (LinkList) malloc(sizeof(Lnode));
s->data = x;
s->next = NULL;
p->next = s;
return OK;
}
/*创建非递减有序单链表,创建成功返回OK,创建失败返回ERROR*/
Status CreatOrder_Linklist(LinkList &L) {
int x;
Init_Linklist(L);
scanf("%d", &x);
while (x != -1) {
Insert_Linklist(L, x);
scanf("%d", &x);
}
if (L)
return OK;
return ERROR;
}
/*单链表遍历*/
void Disp_Linklist(LinkList L) {
LinkList p;
p = L->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void BingToOne(LinkList L1,LinkList L2,LinkList &L3){
LinkList pa, pb, pc;
pa = L1->next;
pb = L2->next;
pc = L3 = L1;
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(L2);
}
int main(){
LinkList La,Lb,Lc;
CreatOrder_Linklist(La);
// Disp_Linklist(La);
CreatOrder_Linklist(Lb);
// Disp_Linklist(Lb);
BingToOne(La,Lb,Lc);
Disp_Linklist(Lc);
system("pause");
return 0;
}
生命依靠吸收负熵,避免了趋向平衡的衰退

浙公网安备 33010602011771号