学校老师布置的实验报告,代码存在这里,有需要自取
#include<stdio.h>
#include<process.h>
#include<malloc.h>
#define true 1
#define false 0
#define ok 1
#define error 0
#define overflow -2
#define initsize 100
#define increment 10
#define null 0
typedef int status;
typedef int elemtype;
typedef struct lnode
{
elemtype data;
struct lnode *next;
} lnode,*linklist;
void listtraverse(linklist l)
{
//遍历链式表l
linklist p=l->next;
while(p!=null)
{
printf("%d\n",p->data);
p=p->next;
}
}
void creatlist(linklist &l,int n)
{
//逆位序输入个元素的值,建立带表头节点的单链表l
int i;
linklist p;
l=(linklist)malloc(sizeof(lnode));
l->next=null;
for(i=n; i>0; --i)
{
p=(linklist)malloc(sizeof(lnode));
p->data=i;
p->next = l->next;
l->next = p;
}
}
status getelem(linklist l,int i,elemtype &e)
{
//取带头节点的单链表l中第i个元素,用e返回
int j;
linklist p;
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(linklist &l,int i,elemtype e)
{
//在带头节点的单链表l中第i个位置前插入元素e
linklist p,s;
int j=0;
p=l->next;
while(p&&j<i-2)
{
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 lisdelete(linklist &l,int i)
{
//删除结点
linklist p=l,q;
int j=1;
while(p&& (j<i))
{
p=p->next;
j++;
}
if((p==NULL)||(p->next==NULL))
return error;
q=p->next;
p->next=q->next;
free(q);
return ok;
}
int main()
{
linklist l;
int i,e,j,f,k;
int n;
printf("请输入节点个数:");
scanf("%d",&n);
creatlist(l, n);
printf("建表成功!\n");
listtraverse(l);
printf("请输入要查找的结点位置 i:");
scanf("%d",&i);
getelem(l,i,e);
printf("第 %d 个结点是: %d\n",i,e);
printf("请输入要插入的位置以及元素值: ");
scanf("%d %d",&j,&f);
listinsert(l,j,f);
listtraverse(l);
printf("请输入要删除的结点位置 k:");
scanf("%d",&k);
lisdelete(l,k);
listtraverse(l);
return 0;
}
代码运行效果图