数据结构实验——动态分配链表
数据结构实验——动态分配链表
#include <iostream>
#include <cstdio>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
LinkList chuangjian(int n)
{
LinkList L,p,q;
int i,m;
L =(LinkList) malloc (sizeof(LNode));
q=(LinkList) malloc (sizeof(LNode));
L->next = q;
scanf("%d",&q->data);
for(i=2;i<=n;i++)
{
p=(LinkList) malloc (sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next = NULL;
return(L);
}
Status GetElem_L(LinkList L,int i,int &e){
LinkList p;int j;
p=L->next;
j=1;
while(p&&j<i){
p =p->next;
++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
Status ListInsert_L(LinkList &L,int i, int e){
LinkList p,s;
p = L; int 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;
}
int ListDelete_L(LinkList & L,int i,int &e){
LinkList p, q;
p= L; int j=0;
while (p->next && j<i-1){
p=p->next; ++j;
}
if(!(p->next)||j>i-1) return ERROR;
q=p->next; p->next =q->next;
e= q->data; free(q);
return OK;
}
void printlist(LinkList L)
{ LinkList p;
p=L;
p=p->next;
while (p!=NULL)
{ printf("%2d", p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int m,n,i,e;
LinkList L;
printf("开始创建一个单链表\n");
printf("输入一个数n表示链表长度,接着输入n个数\n");
scanf("%d",&n);
L=chuangjian(n);
for(;;){
printf("1:查找元素\n");
printf("2:插入元素\n");
printf("3:删除元素\n");
printf("4:输出链表元素\n");
printf("5:结束程序\n");
printf("请输入功能键\n");
scanf("%d",&m);
switch(m)
{
case 1:{printf("请输入你需要查找的是第几个元素\n");
scanf("%d",&i);
GetElem_L(L,i,e);
printf("%d\n",e);
break;
}
case 2:{printf("请输入要插入到第几个单元之前\n");
scanf("%d",&i);
printf("输入你要插入的数字\n");
scanf("%d",&e);
ListInsert_L(L,i,e);
printlist(L);
break;
}
case 3:{ printf("输入需要删除数据的单元\n");
scanf("%d",&i);
ListDelete_L(L,i,e);
printlist(L);
break;
}
case 4:{printlist(L);
break;
}
case 5:{
break;
}
default: printf("输入功能不正确\n");
}
if(m==5)
break;
}
}