数据结构链表实验报告.doc
文本预览下载声明
#include stdio.h
#include stdlib.h
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data; //*链表节点的定义*//
struct LNode *next;
}*LinkList;
void createList(LinkList L,int n)
{
int i;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L-next=NULL;
q=L;
printf(请输入%d个数据\n,n);
for(i=1;i=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf(%d,p-data);
q-next=p;
q=q-next;
}
p-next=NULL;
}
void ListTraverse(LinkList L, void(*print)(int))
{
LinkList p=L-next;
while(p)
{
print(p-data);
p=p-next;
}
printf(\n);
}
void print(int e)
{
printf(%d,e);
}
int Listlength(LinkList L)
{
int i=0;
LinkList p;
p=L-next; //*p指向第一个结点*//
while(p) //*注意单循环链表的控制条件*//
{
i++;
p=p-next;
}
return i;
}
int GetElem(LinkList L,int i,int e)
{
int j=1;
LinkList p=L-next;
while(pji)
{ j++;
p=p-next;
}
if(!p||ji)
return ERROR;
e=p-data;
return OK;
}
int ListInsert(LinkList L,int i,int e)
{
int j=0;
LinkList s,p=L;
while(pji-1)
{
j++;
p=p-next;
}
if(!p||ji-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s-data=e;
s-next=p-next;
p-next=s;
return OK;
}
int ListDelete(LinkList L,int i,int e)
{
int j=0;
LinkList q,p=L;
while(p-nextji-1)
{
j++;
p=p-next;
}
if(!p-next||ji-1)
return ERROR;
q=p-next;
p-next=q-next;
e=q-data;
free(q);
return OK;
}
void DestroyList(LinkList L)
{
LinkList q;
while(L)
{
q=L-next;
free(L);
L=q;
}
}
main()
{
int n,t,length,i,m1,m2,m3;
int e1,e2,e3;
LinkList L;
printf(请输入结点个数n=);
scanf(%d,n);
printf(请输入t=);
scanf(%d,t);
createList(L,n);
switch(t)
{
case 1: { printf(输出该线性表:);ListTraverse(L, print);} break;
case 2: { length=Listlength(L); printf(输出该线性表长度%d\n,length);} break;
case 3:{ printf(请输入要查找的元素位置m1=);
scanf(%d,m1);GetElem(L,m1,e1);printf(输出线性表的第%d个元素为%d\n,m1,e1);} break;
case 4:{printf(请输
显示全部