单链表定义初始化 c语言,循环单链表定义初始化及创建(C语言)

#include #include

/**

* 含头节点循环单链表定义,初始化 及创建*/

#define OK 1;

#define ERROR 0;

//函数返回类型,表示函数运行结果的状态

typedef intStatus;//定义数据元素类型

typedef charElemType;//循环单链表定义

typedef structLoopLnode {

ElemType data;//数据域,这里是char类型变量

struct LoopLnode *next; //指针域,结构体类型指针

} LoopLnode, *LoopLinkList;//循环单链表初始化

Status InitList(LoopLinkList *list) {

(*list)=(LoopLinkList)malloc(sizeof(LoopLnode));

(*list)->next=(*list);

(*list)->data='T'; //测试用,可不写

returnOK;

}//1."头插法"创建仅含"头指针"的单向循环链表

Status CreateList_H(LoopLinkList *list,ElemType arrData[],intlength){intj;for(j=length-1;j>=0;j--){//新建结点

LoopLnode *node;

node=(LoopLnode*)malloc(sizeof(LoopLnode));

node->data=arrData[j];

node->next=NULL;//插入循环链表

node->next=(*list)->next;

(*list)->next=node; //list始终指向头结点

}returnOK;

}//2."尾插法"创建仅含"头指针"的单向循环链表

Status CreateList_R(LoopLinkList *list,ElemType arrData[],intlength){

LoopLnode*r;

r=*list;intj;for(j=0;j

LoopLnode *node;

node=(LoopLnode*)malloc(sizeof(LoopLnode));

node->data=arrData[j];

node->next=NULL;//插入循环链表

node->next=r->next;

r=node;

}returnOK;

}//3."头插法"创建仅含"尾指针"的单向循环链表

Status BuildList_H(LoopLinkList *list,ElemType arrData[],intlength){intj;for(j=length-1;j>=0;j--){//新建结点

LoopLnode *node;

node=(LoopLnode*)malloc(sizeof(LoopLnode));

node->data=arrData[j];

node->next=NULL;//node插入1号结点,list为尾指针

node->next=(*list)->next->next; //node->next=头结点->next

if((*list)->next==(*list)) (*list)=node; //当只有头结点时(插入第一个结点时,手动设置node为尾指针)

(*list)->next->next=node; //头结点->next=node;

}returnOK;

}//4."尾插法"创建仅含"尾指针"的单向循环链表

Status BuildList_R(LoopLinkList *list,ElemType arrData[],intlength) {intj;for(j=0;j

LoopLnode *node;

node=(LoopLnode*)malloc(sizeof(LoopLnode));

node->data=arrData[j];

node->next=NULL;

node->next=(*list)->next; //node->next=头结点

(*list) = node; //尾指针 —> node

}returnOK;

}int main(void){//产生待插入到链表的数据

ElemType data1='A',data2='B',data3='C';

ElemType waitInserted[]={data1,data2,data3,};//获得数组长度

int arrLength=sizeof(waitInserted)/sizeof(waitInserted[0]);/**1.头插法建立只含头指针循环单链表**/

//定义链表并初始化

LoopLinkList list1;

InitList(&list1);//按既定数据建立链表

CreateList_H(&list1,waitInserted,arrLength);//测试

printf("%c\n",list1->next->next->next->next->next->next->data); //B

/**2.尾插法建立只含头指针循环单链表**/

//定义链表并初始化

LoopLinkList list2;

InitList(&list2);//按既定数据建立链表

CreateList_R(&list2,waitInserted,arrLength);//测试

printf("%c\n",list1->next->next->next->next->next->next->data); //B

/**3.头插法建立只含尾指针循环单链表**/

//定义链表并初始化

LoopLinkList list3;

InitList(&list3);//按既定数据建立链表

BuildList_H(&list3,waitInserted,arrLength); //list3指向表尾//测试

printf("%c\n",list3->next->next->next->next->next->next->next->next->next->data); //T

/**4.尾插法建立只含尾指针循环单链表**/

//定义链表并初始化

LoopLinkList list4;

InitList(&list4);//按既定数据建立链表

BuildList_H(&list4,waitInserted,arrLength); //list4指向表尾//测试

printf("%c\n",list4->next->next->next->next->next->next->next->next->next->next->data); //A

printf("\nEND!");return 0;

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值