#include<stdio.h>typedef struct node{int num struct node *next}NodeNode *CreateLinkList()Node *CreateCircularLinkList()Node *TailInsert(Node *Head, int k)void poutLinkList(Node *Head)main() { int iNode *Head Head=CreateCircularLinkList() for(i=1i<11i++) Head=TailInsert(Head,i) poutLinkList(Head) }/* create a linklist */Node *CreateLinkList(){ Node *H,*new_node new_node=(Node *)malloc(sizeof(Node)) if(!new_node){ printf("HeadInsert:cannot create a node") return NULL } H=new_nodenew_node->next=NULLnew_node->num=0 return H} /*create a circular linked list*/Node *CreateCircularLinkList(){ Node *H,*new_node new_node=(Node *)malloc(sizeof(Node)) if(!new_node){ printf("HeadInsert:cannot create a node") return NULL } H=new_nodenew_node->next= new_nodenew_node->num=0 return H} /* Insert a new node */孝胡Node *TailInsert(Node *Head, int k){ Node *H,*new_node,*q,*p int i=0 H=Head p=H->next q=H while(p!=H){q=p p=p->next } new_node=(Node *)malloc(sizeof(Node)) if(!new_node){ printf("TailInsert:cannot create a node") return NULL }new_node->隐斗next=q->nextq->next=new_node new_node->num=kreturn H}void poutLinkList(Node *Head){ Node *H,*p H=Head p=Head->next while(p!=H){printf(" %d ->",p->num) p=p->next }} 上面是我写的一段小程序,实现了循环单链灶慎磨表的功能。本程序利用循环建立了一个带头
结点的循环单
链表,插入了10个结点,输出如下图所示。#include <iostream>
using namespace std
typedef char ElemType
typedef int Status
#define OK 1
#define ERROR 0
typedef struct Lnode
{
ElemType data
struct Lnode *next
}Lnode,*LinkList
void Creat_List(LinkList L)//创建单链表并输入元素
{
LinkList p,q
q=L
char ch
cout<<"请输入链表元素,并且以输碰塌孙入#表示结束!"<<endl
while(cin>>ch&&ch!='#')
{
p=new Lnode[sizeof(Lnode)]
if(!p)
{
cout<<"获取内存失败"<<endl
exit(ERROR)
}
p->data=ch//尾插法
L->next=p
L=p
}
L->next=q
}
void output_List(LinkList L)//遍历单链表(输出单链表衫漏元素)
{
LinkList p
p=L->next
if(p==L)
{
cout<<"该链表是空链表!"<<endl
exit(ERROR)
}
while(p!=L)
{
cout<<p->data<<"笑链 "
p=p->next
}
}
Status main()
{
LinkList H
H=(LinkList)malloc(sizeof(Lnode))
H->next=NULL//设置头结点为空
Creat_List(H)
output_List(H)
return 0
}//头结点有和没有都是可以的,头结点只是为了让 *** 作链表更方便,
评论列表(0条)