以前的实验题。
#define OK 1
#define NULL 0
#define ERROR 2
#define ElemType int
#include "iostream。
h"
#include "stdio。h"
#include "stdlib。
h"
typedef struct LNode
{ int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreateList_L(LinkList L, int n)
//建立单链表
{
LinkList p,q;
int i;
L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
q=L;
for (i = 1; i data);
p->next = NULL;
q->next = p;
q=p;
}
return L;
}
int print( LinkList L) //输出链表
{ LinkList p;
p = L->next;
if (p!=NULL)
{
while(p)
{
printf("%d ",p->data);
p = p->next;
}
}
else
coutnext;
j=0;
while(p!=NULL)
{ j ;p=p->next; }
return j;
}
int CleatList_L(LinkList L) //清空链表元素
{
LinkList p;
while(L->next)
{
p=L->next;
L->next=p->next;
free(p);
}
coutnext; j;
} //寻找第i-1个结点
if (!p||j > i-1)
return ERROR; // i 大于表长或者小于1
s=(LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next; // 插入L中
p->next = s;
return OK;
}
int ListDelete_L(LinkList L, int i, ElemType &e) //在带头结点的单链表线性表L中,删除第i个元素,并由e返回其值
{LinkList p,q;
int j;
p = L; j = 0;
while (p->next && j next; j; }
// 寻找第 i 个结点,并令 p 指向其前趋
if (!(p->next) || j > i-1)
return ERROR; // 删除位置不合理
q = p->next; p->next = q->next; // 删除并释放结点
e = q->data; free(q);
return OK;
}
int GetElem_L(LinkList L,int i,char &e) // L是带头结点的链表的头指针
//当第i个元素存在时,其值赋给e并返回ok,否则返回ERROR
{LinkList p;int j;
p=L->next;
j=1;
while(p&&jnext;
j;
}
if(!p||j>i)return ERROR; // 第 i 个元素不存在
e=p->data;// 取得第 i 个元素
return e;
}
void showmenu()
{
cout>n;
L=CreateList_L(L,n);
showmenu();
cin>>choice;
while(choice!=0)
{
switch(choice)
{
case 1:
cout>n;
L=CreateList_L(L,n);
case 2:print(L); break;
case 3:
printf("length:%d ",ListLength(L));
break;
case 4:
CleatList_L(L);
break;
case 5:
cout>i;
cout>e;
ListInsert_L(L,i,e);
break;
case 6:
cout>i;
ListDelete_L(L,i,n) ;
break;
case 7:
cout>i;
cout>choice;
}
}。
全部