#include<stdlib.h>
#include<stdio.h>
#define ERROR 0
#define OK 1
typedef int ElemType; //建立带表头结点的单链表
typedef struct node
{
ElemType element;
struct node *link;
}node;
typedef struct
{
struct node *head;
int n;
}headerList;
typedef int Status;
Status Init (headerList *h ) //对单链表初始化
{
h->head=(node*)malloc (sizeof(node));
if(!h->head)
return ERROR;
h->head->link=NULL;
h->n=0;
return OK;
}
Status Insert(headerList *h,int i,ElemType x)//单链表的插入操作
{
node *p,*q;
int j;
if (i<-1||i>h->n-1)
return ERROR;
p=h->head;
for (j=0;j<=i;j++) p=p->link;
q=malloc(sizeof(node));
q->element=x;
q->link=p->link;
p->link=q;
h->n++;
return OK;
}
Status Output(headerList h)//单链表的输出操作
{
int i=0;
node *p;
if(!h.head)
return ERROR; //判断单链表是否为空
p=h.head;
for(i=0;i<h.n;i++)
{
p=p->link;
printf("%d",p->element);
}
return OK;
}
Status Delete(headerList *h,int i) //删除操作,不考虑删除头结点
{
int j;
node *p,*q;
if(!h->n)
return ERROR;
if(i<0||i>h->n-1)
return ERROR;
q=h->head;
for (j=0;j<i;j++) q=q->link;
p=q->link;
q->link=p->link;
free(p);
h->n--;
return OK;
}
Status Find(headerList h,int i,ElemType *x)//单链表的查找
{
node *p;
int j;
if (i<0||i>h.n-1)
return ERROR;
p=h.head->link;
for (j=0;j<i;j++) p=p->link;
*x=p->element;
return OK;
}
void Destroy (headerList *h) //单链表的撤销
{
node *p;
while (h->head)
{
p=h->head->link;
free(h->head);
h->head=p;
}
}
void main()
{
int i;
int x;
headerList list;
Init (&list); //单链表初始化
for(i=0;i<9;i++)
Insert (&list,i-1,i); //插入数据
printf("the linklist is:");
Output (list); //输出插入数据
Delete (&list,0); //执行删除操作
printf("\nthe linklist is:");
Output(list); //执行输出操作
Find(list,0,&x); //执行查找操作
printf("\nthe value is:"); //输出查找结果
printf("%d",1);
Destroy(&list); //执行撤销操作
}
首先建立一带表头结点的单链表,首先进行初始化操作,利用for循环进行插入,插入结果为012345678,利用删除操作,删除0之后,输出结果为12345678,利用查找操作找到在0位置出的数为1,执行结果如图。