1.实验目的及要求
通过本实验,进一不了解线性表的操作,熟悉线性表的运算,了解链式存储结构的实现方法和在链式存储条件下实现线性的相关操作。
2.实验内容
用C 语言设计在链式存储结构下,建立、插入、删除、访问及输出线性表的程序。
3.实验类型:验证性实验。
#include
#include
typedef char elemtype;
typedef struct dnode
{elemtype data;
struct dnode *prior;
struct dnode *next;
}dlinklist;
void displist(dlinklist *L);
int listlength(dlinklist *L);
void list (void);
void initlist (dlinklist *&L);
void destorylist (dlinklist *L);
int listempty(dlinklist *L);
void listdelete (dlinklist *L,int i,elemtype &e);
void getelem (dlinklist *L,int i, elemtype &e);
int locateelem(dlinklist *L,elemtype e);
int listinsert (dlinklist *L,int i, elemtype e);
#include "head.h"
int length;
#include "head1.h"
int main (void)
{char ch;
dlinklist *L;
elemtype e;
int i;
while(1)
{list();
}
return 0;
}
#include
void list (void)
{printf("***************************************\n");
printf("1: 初始化链表
printf("3: 求元素个数
printf("5: 取第i 元素
printf("7: 插入元素e
printf("9: 删除第i 元
printf("***************************************\n");
printf("
}
#include"head.h"
extern int length;
void destorylist (dlinklist *L)
{ dlinklist *p=L->next;
if (length!=0)
{while(p!=L)
length=0;
}
}
void displist(dlinklist *L)
{dlinklist *p=L->next;
while(p!=L)
{printf("%c
printf("\n");
}
void getelem (dlinklist *L,int i, elemtype &e)
{int j=1;dlinklist *p=L->next;
while(p!=L&&j
{p=p->next;j++;}
e=p->data;
}
extern int length;
void initlist (dlinklist *&L )
{
L=(dlinklist *)malloc(sizeof(dlinklist));
if(!L)
printf("初始化失败!\n");
else
{length=0;L->next=L->prior=L;}
}
void listdelete (dlinklist *L,int i,elemtype &e)
{dlinklist *p=L->next;
int j=1;
while(p!=L&&j
{p=p->next;j++;}
if(j==i)
{p->prior->next=p->next;
p->next->prior=p->prior;
e=p->data;free(p);
length--;}
}
int listempty(dlinklist *L)
{
int i=0;
dlinklist *p=L->next;
}
int listinsert (dlinklist *L,int i, elemtype e)
{dlinklist *p=L->next,*q;int j=1;
{q=(dlinklist *)malloc(sizeof(dlinklist));
}
int listlength(dlinklist *L)
{return length;
}
int locateelem(dlinklist *L,elemtype e)
{dlinklist *p=L->next;
int i=1;
while(p!=L&&p->data!=e)
{p=p->next;i++;}
if(p->data!=e)return 0;
else return i;
}
2》有人说上面的太繁琐,看不懂。好吧来个简单的创建删除插入
#include <iostream.h>
#include <malloc.h> //Using malloc and realloc
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE true
#define FALSE false
#define ElemType int
typedef struct
{
ElemType *elem; //数据元素的基地址
int length; //线性表的当前长度
int listsize; //当前分配的存储容量
}SqList;
bool InitList_Sq (SqList &L)
{ //malloc和new的区别请看说明1
//L.elem=new ElemType[LIST_INIT_SIZE]; //分配空间
if (!L.elem) return FALSE;
L.length=0; //将当前线性表长度置0
L.listsize=LIST_INIT_SIZE;
return TRUE;//成功返回OK
}
void DestroyList_Sq(SqList &L)
{
if (L.elem) free(L.elem); //释放线性表的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
}
void ClearList_Sq (SqList &L) //清空线性表L
{
L.length=0; //将线性表的长度置为0
}
bool ListEmpty_Sq (SqList &L)//判断线性表L是否为空
{
}
int ListLength_Sq (SqList &L)//求线性表L的长度
{
}
ElemType GetElem_Sq (SqList &L, int i)//获取线性表L中的某个数据元素的内容
{
ElemType e;
return e;
}
int LocateElem_Sq (SqList &L, ElemType e)//在线性表L中检索值为e的第一个数据元素
{
for (int i=1; i<=L.length; ++i)
if (L.elem[i]==e) return i;
}
bool ListInsert_Sq (SqList &L, int i, ElemType e)//在线性表L中下标为i的数据元素之前插入数据元素e
{
if (i<1||i>L.length+1)
{
cout<<"i值不合法"<<endl;//i值不合法
return FALSE;
}
if (L.length>=L.listsize)
{
L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));//realloc的返回值请看说明2
if(!L.elem) {cout<<"OVERFLOW"<<endl; return FALSE;}//存储分配失败
L.listsize+=LISTINCREMENT;//增加存储容量
}
for (int j=L.length; j>=i; --j)
L.elem[j+1] = L.elem[j];
}
ElemType ListDelete_Sq(SqList &L, int i, ElemType e)// 将线性表L中第i个数据元素删除
{
if (i<1 || i>L.length)
{
cout<<"i值不合法"<<endl;//i值不合法
return FALSE;
}
e=L.elem[i];
L.elem[j-1]=L.elem[j];
}
//------------------算法2.1--------------------------------------
void union_Sq(SqList &La,SqList &Lb)
{
//说明
//算法的功能是将所有在线性表Lb中但不在La中的数据元素插入到La中
for(int i=1;i<=7;++i)
{
ElemType e=GetElem_Sq(Lb,i);
}
}
//-----------------算法2.2--------------------------------
void MergeList_Sq(SqList &La,SqList &Lb,SqList &Lc)
{
int i=1;
int j=1;
int k=0;
ElemType e1,e2;
while(i<=La.length && j<=Lb.length)//La和Lb均非空
{
e1=GetElem_Sq(La,i);e2=GetElem_Sq(Lb,j);
if(e1<e2) {ListInsert_Sq(Lc,++k,e1);++i;}
else {ListInsert_Sq(Lc,++k,e2);++j;}
}
while(i<=La.length)
{e1=GetElem_Sq(La,i++);ListInsert_Sq(Lc,++k,e1);}//注意i
while(j<=Lb.length)
{e2=GetElem_Sq(Lb,j++);ListInsert_Sq(Lc,++k,e2);}
}
//---------------------------主函数-------------------------------------
void main()
{
InitList_Sq(la);
InitList_Sq(lb);
//------------------算法2.1的测验--------------------------------------
//------------------算法2.2的测验--------------------------------------
}