一 试验目的和要求 1. 实验目的
了解线性表的逻辑结构特性,熟练掌握线性表的链式存储结构,熟练掌握线性表在链式存储结构上实现基本操作:查找,插入,删除的算法。能在实际应用中选用适合的链表结构。加深对链表的本质了解。 2. 实验要求
利用双向链表实现长整数的存储,每个结点含一个整型变量。设计一个实现任意长的整数进行四则运算的演示程序。 二 实验环境
本程序可以在98/2000/XP下运行,可以用VC++6.0执行 三 程序的逻辑框图
双向链表的
初始化
主函数
输入任意长整数
调用双向链表基
本操作函数
长整数求值及结
果显示
END
四, 程序源代码 /*list.h*/
#include
#define INFEASLBLE -1 #define OVERFLOW -2
typedef int Status; typedef int ElemType;
typedef struct DuLNode { ElemType data;
struct DuLNode *prior,*next; }DuLNode,*DuLinkList;
//构造一个空的双向循环线性表,L为头结点 Status InitList_DuL(DuLinkList &L); //在L中确定第i个元素的位置指针p
DuLinkList GetElemP_DuL(DuLinkList L,int i);
//在带头结点的双链循环线性表L中第i个位置之前插入元素e , //i的合法值为1<=i<=ListLength_DuL(L)+1
Status ListInsert_DuL(DuLinkList &L,int i,ElemType e);
//删除带头结点的双链循环线性表L中第i个元素,i的合法值为1<=i<=ListLength_DuL(L) Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e);
//若L为空表,则返回TRUE,否则返回FALSE bool ListEmpty_DuL(DuLinkList L);
//线性表L已存在,返回L中数据元素个数 Status ListLength_DuL(DuLinkList L); //若线性表L已存在,将L置为空表 Status ClearList_DuL(DuLinkList &L); //销毁线性表L
Status DestroyList_DuL(DuLinkList &L); //用e返回L中第i个数据元素的值
void GetElem_DuL(DuLinkList L,int i,ElemType &e); //返回双向循环链表L中e出现的次数 int Counter_DuL(DuLinkList L,ElemType e);
//返回第n个e的在链表中位置 n的合法值为0<=n<=Counter_DuL( L,n) int Position_DuL(DuLinkList L,int n,ElemType e);
/*function.cpp*/ #include\
/**************************************************************************************************/
/****************************函数声明**************************************************************/
/**************************************************************************************************/
DuLinkList calculate(DuLinkList p,int*j,char *f,int *num,int k); void output(DuLinkList r);
DuLinkList Pack_Up(DuLinkList r); //整理链表r void exchange(DuLinkList &L,int &j);
DuLinkList read_r(); void operate(DuLinkList p);
void decride_d();
int counter(int a); //计算整数位数 int max(int *num,int k); //返回最大值
/*list.cpp*/ #include\
Status InitList_DuL(DuLinkList &L)
{//构造一个空的双向循环线性表,L为头结点 L=(DuLinkList)malloc(sizeof(DuLNode)); if(!L)exit(OVERFLOW); L->next=L; L->prior=L; return OK; }//InitList_DuL
DuLinkList GetElemP_DuL(DuLinkList L,int i) {//在L中确定第i个元素的位置指针p DuLinkList p; p=L; for(int j=0;jnext; return (p); }//GetElemP_DuL