⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 链表.txt

📁 这是用C语言写的一个数据结构实验
💻 TXT
字号:
#include "malloc.h"
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"
#define OK 1
#define ERROR 0
#define NULL 0
typedef int ElemType;
typedef int Status;
typedef struct LNode
{   ElemType data;
    struct LNode *next;
}LNode,*LinkList;


Status InitList_L(LinkList &L)
{  L=(LinkList)malloc(sizeof(LNode));
   L->next=NULL;
   return OK;
}
Status ClearList_L(LinkList &L)
{  struct LNode *p,*q;
   p=L;
   while(p->next!=NULL)
   {q=p->next;
   p->next=q->next;
   free(q);}
   return OK;
}
Status ListLength_L(LinkList L)
{  struct LNode *p;
   int k=0;
    p=L;
   while(p->next!=NULL)
   {++k;
     p=p->next;
   }return k;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{ if (i<1||i>ListLength_L(L)+1)
{printf("Initial failure!\n");  getch();
}
struct LNode *p,*s;
int j;
p=L;j=0;
while(p&&j<i-1)
{p=p->next;j++;}
	if(!p||j>i-1)return ERROR;
	s=(LinkList)malloc(sizeof(LNode));
	s->data=e;s->next=p->next;
	p->next=s;
	return OK;
}
Status ListTraverse_L(LinkList L)
{ struct LNode *p;
p=L;
if(p->next==NULL)printf("List is empty\n");
else{ p=p->next;
while(p!=NULL)
{printf("%-5d",p->data);p=p->next;}
printf("\n");}
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{if(i<1||i>ListLength_L(L)+1)return ERROR;
struct LNode *p,*q;
int j;
p=L;j=0;
while(p->next&&j<i-i)
{p=p->next;++j;}
if(!(p->next)||j>i-1)return ERROR;
  q=p->next;p->next=p->next;
  e=q->data;free(q);
  return OK;}
Status GetElem_L(LinkList L,int i,ElemType &e)
{if(i<1||i>ListLength_L(L)+1)return ERROR;
  struct LNode *p,*q;
  int j;
  p = L;j = 0;
  while(p->next&&j<i-1)
 { p = p->next;++j;}
 if(!(p->next)||j>i-1)return ERROR;
q=p->next;
e=q->data;
printf("e=%d\n",e);return(e);
return	OK;
}
Status GreateList_L(LinkList &L,int n) 
{int i;
 struct LNode *p;
	L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i){
	p=(LinkList)malloc(sizeof(LNode));
    scanf("%d",&p->data);
	p->next=L->next; L->next=p;
}
return OK;}
Status GreateList_L1(LinkList &L,int n) 
{
int i;
 struct LNode *p,*last;
	L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i>0;i<n;i++){
	p=(LinkList)malloc(sizeof(LNode));
    scanf("%d",&p->data);
 L=last; p->next=last->next; last->next=p;p=last;
}
return OK;}
Status LocateElem_L(LinkList L,ElemType e)
{int i;
struct LNode *p;
p=L->next;i=1;
while(p!=NULL&&p->data!=e)
{ p=p->next;i++;}
if(!p){printf("Not found!\n");
return 0;}
else{printf("i=%d\n",i);return(i);}
return OK;}
Status ListEmpty_L(LinkList L)
{
if (L->next=NULL)
printf("表为空\n"); 
else printf("表不为空\n"); 

return OK;}


int scan()
{
	int d;
	printf("请选择所要进行的操作\n");

	printf("1. 初始化                    2. 插入元素\n");
	printf(" 3.遍历单链表                4.求单链表的长度\n");
	printf(" 5.删除元素                  6.插找元素\n");
    printf(" 7. 头插入法建立单链表       8.尾插入法建立单链表\n");
    printf(" 9. 按值查找元素             10.检查表是否为空\n");

	printf("0.退出\n");
	scanf("%d",&d);
	return(d);
}
main()
{ int i,n;
  int quit=0;
  ElemType e;
  LinkList L;
  cout <<("第一次操作需选择初始化或者头插入法\n")<<endl;
  while(!quit)
	  switch(scan())
  {case 1:InitList_L(L);break;
   case 2: cout<<("请输入要插入的位置\n");cin>>i;
           cout<<("请输入要插入的元素\n");cin>>e;
		   ListInsert_L(L,i,e);break;
   case 3:ListTraverse_L(L);break;
   case 4:printf("%d\n",ListLength_L(L));break;
   case 5:cout<<("请输入要删除的位置\n");cin>>i;
		  ListDelete_L(L,i,e);break;
   case 6:cout<<("请输入要查找的位置\n");cin>>i;
			  GetElem_L(L,i,e);break;
   case 7:cout<<("输入要插入的元素\n");cin>>n;
	       GreateList_L(L,n);break;
 case 8:cout<<("输入要插入的元素\n");cin>>n;
	       GreateList_L1(L,n);break;
case 9:cout<<("输入要查找的元素\n");cin>>e;
	       LocateElem_L(L,e);break; 
 case 10:ListEmpty_L(L);break;
   case 0:quit=1;}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -