C语言实现带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作

时间:2022-08-23 14:44:29

#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,执行结果如图。

C语言实现带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作