贵州大学实验报告
学院:计算机科学与信息学院 专业: 班级:
程序清单如下:
// 实验二-链表.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
using namespace std;
typedef int ElemType;
struct LNode
{
ElemType data;
LNode* next;
};
//初始化链表
void InitList(LNode* &HL)
{
HL->next =NULL;
}
//判断输入的数据是否为整型
int JudgeData()
{
char c[100];
Judge:
cin>>c;
if(strcmp(c,"no")==0)
return(-879);
else if(c[0]=='-'||c[0]>='0'&&c[0]
{
for(int i=1;c[i]!='\0';i++)
{
if(c[i]'9')
{
cout
cout
goto Judge;
}
}
return atoi(c);
else
{
cout
cout
goto Judge;
}
}
//输入相应的操作
char JudgeOperation()
{
char c[100];
judge:
cin>>c;
if(strlen(c)==1)
{
if(c[0]'8')
{
cout
goto judge;
}
}
else
{
cout
goto judge;
}
return (c[0]);
}
//为链表录入数据
void InputList(LNode* &HL)
{
int i=0;
LNode* ap,*cp;
ap=HL;
while(1)
{
i++;
cout
if(item==-879) ; "
cout
break;
}
else
{
cp=new LNode;
ap->next =cp;
cp->data =item;
ap=cp;
}
}
ap->next=NULL;
}
//显示链表所有信息
void DisplayList(LNode* HL)
{
int i=0;
LNode* cp=HL->next;
while(cp!=NULL)
{
i++;
coutdata
cp=cp->next;
}
cout
cout
}
//查找元素和位置
void FindList(LNode* HL,ElemType item, int pos)
{
LNode* cp=HL->next;
if(pos
{
cout
return;
}
else if(pos==-1)
{
pos=1;
while(cp->next!=NULL)
{
pos++;
cp=cp->next;
}
}
else if(pos==0)
{
pos=1;
while(cp!=NULL)
{
if(cp->data==item)
break;
else
{
pos++;
cp=cp->next;
}
}
if(cp==NULL)
{
cout
return;
}
}
else
{
int i=1;
while(cp!=NULL)
{
if(i==pos) break;
else cp=cp->next;
i++;
}
if(cp==NULL)
{
cout
}
}
coutdata
}
//向链表中插入元素
void InsertList(LNode* &HL,ElemType item,int pos)
{
LNode* ap,*cp,*tp; cp=HL->next; ap=HL; if(posnext; } } else if(pos==0) { pos=1; while(cp!=NULL) { if(item data) break; else { ap=cp; cp=cp->next; } pos++; } } else { int i=0; while(cp!=NULL) { i++; if(i==pos) break; else { ap=cp; cp=cp->next;
}
}
if(i+1
{
cout
return;
}
}
tp=new LNode;
tp->data=item;
if(pos==1)
{
HL->next=tp;
tp->next=cp;
}
else
{
ap->next=tp;
tp->next=cp;
}
cout
}
//删除链表中的元素
void DeleteList(LNode* &HL,ElemType item,int pos)
{
LNode* ap,*cp;
cp=HL->next;
ap=HL;
if(pos
{
cout
}
else if(pos==-1)
{
pos=1;
while(cp->next!=NULL)
{
pos++;
ap=cp;
cp=cp->next;
}
}
else if(pos==0) { pos=1; while(cp!=NULL) { if(cp->data==item) break; else { pos++; ap=cp; cp=cp->next; } } if(cp==NULL) { coutnext; } } if(cp==NULL) { coutnext=cp->next; else ap->next=cp->next; ElemType tem=cp->data; delete cp;
cout
}
//清空链表
void EmptyList(LNode* &HL)
{
LNode* tem;
LNode* cp=HL->next;
if(HL->next==NULL)
cout
else
{
while(cp!=NULL)
{
tem=cp;
cp=cp->next;
delete tem;
}
HL->next=NULL;
cout
}
}
//排序链表
void SortList(LNode* &HL)
{
LNode*tem,*cp;
tem=new LNode;
cp=HL->next;
tem->next=NULL;
while(cp!=NULL)
{
InsertList(tem,cp->data,0);
cp=cp->next;
}
EmptyList(HL);
cout
HL=tem;
}
//操作菜单
void Menu()
{
LNode* h;
h=new LNode;
InitList(h);
ElemType item;
int pos;
menu:
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
switch(JudgeOperation())
{
case '1':
InputList(h);
cout
goto menu;
case '2':
if(h->next==NULL)
{cout
cout
cout
cout
cout
switch(JudgeOperation())
{
case '1':
cout
item=JudgeData();
FindList(h,item,0);
goto Find;
case '2':
cout
FindList(h,0,pos);
goto Find; ; "
case '3': cout
cout
goto Find;
}
case '3':
if(h->next==NULL)
{cout
cout
cout
cout
cout
switch(JudgeOperation())
{
case '1':
cout
item=JudgeData();
InsertList(h,item,0);
goto Insert;
case '2':
cout
pos=JudgeData();
cout
InsertList(h,item,pos);
goto Insert;
case '3':
cout
goto menu;
default:
cout
goto Insert;
}
case '4':
if(h->next==NULL)
{cout
cout
cout
cout
cout
switch(JudgeOperation()) { case '1': coutnext==NULL) {coutnext==NULL) {cout>c; if(strlen(c)==1) { if(c[0]=='n')
{
cout
goto menu;
}
else if(c[0]!='y'&&c[0]!='n')
{
cout
}
}
else
{
cout
}
break;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Menu();
return 0;
}