C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作

阿茶大人發表於2018-05-28

#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,執行結果如圖。

相關文章