C语言循环链表最后一个元素指向第一个元素的插入函数
s-next = head-next; 改成s-next = p-next;
我们提供的服务有:成都网站制作、网站建设、微信公众号开发、网站优化、网站认证、镇江ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的镇江网站制作公司
你是要插入到找的那个位置后面,不是要插到头后面.
C语言建立循环链表
#include stdio.h
#includemalloc.h
#includestdlib.h
typedef struct list
{
int num;
struct list *next;
}List;
int n=0;
List *creat()
{
List *head,*p1,*p2;
int i;
if((head=(List *)malloc(sizeof(List)))==NULL)
{
printf("Error");
exit(0);
}
p1=p2=head;
printf("输入创建链表的长度:");
scanf("%d",head-num);//创建列表,带头结点,头结点数据域表示输入的个数
if(head-num==0)
{
head-next=NULL;
printf("已创建带头结点的空链表");
}
else
{
printf("输入数据:\n");
for(i=0;ihead-num;i++)
{
if((p1=(List *)malloc(sizeof(List)))==NULL)
{
printf("Error");
exit(0);
}
scanf("%d",p1-num);
p2-next=p1;
p2=p1;
}
p1-next=head;
}
return(head);
}
void print(List *head)
{
List *p;
p=head-next;
for(;p!=head;)
{
printf("%d ",p-num);
p=p-next;
}
printf("\n");
}
void main()
{
List *head;
head=creat();
print(head);
}
循环链表的C语言问题
建立单向循环链表的代码:
#include stdio.h
#include stdlib.h
typedef struct _A{
int data;
struimg id="selectsearch-icon" src="" alt="搜索"ct _A *next;
}A;
typedef A* IA;
void createDoubleLink(IA *header) {
int data;
IA p;
printf("input data end with -1:");
scanf("%d", data);
while(data != -1) {
p = (IA)malloc(sizeof(A));
p-data = data;
if(*header == NULL) {
*header = p;
(*header)-next = *header;
}
else{
IA q = *header;
while(q-next != *header) {
q = q-next;
}
q-next = p;
q-next-next = *header;
}
scanf("%d", data);
}
}
void print(IA header) {
IA p = header;
if(header == NULL) return;
while(1){
printf("%d\t", p-data);
if(p-next == header) break;
p = p-next;
}
printf("\n");
}
int main()
{
IA header = NULL;
createDoubleLink(header);
print(header);
return 0;
}
头结点的意思是链表的第一个节点,但这个节点不保存数据。
数据结构双向循环链表的C语言实现(插入,查询,删除),代码如下:
#include stdio.h
#include malloc.h
typedef int Elemtype;
typedef struct dNode {
Elemtype data; /*数据域*/
struct dNode *prior; /*指向前驱结点的指针域*/
struct dNode *next;/*指向后继结点的指针域*/
}*pDLink,*DLinkList;
DLinkList GetEmptyDLink() { // 初始化
DLinkList head = (pDLink)malloc(sizeof(struct dNode));
head-data = 0;
head-prior = head;
head-next = head;
return head;
}
void DLink_create(DLinkList head,int n) { /*双向循环链表建立函数*/
int i;
pDLink p,r;
p = r = head;
for(i = 0;i n;i++) {
p-next = (pDLink)malloc(sizeof(struct dNode));/*为一个新结点分配空间*/
scanf("%d",p-next-data); /*从键盘输入值,并保存在新结点数据域中*/
p = p-next; // p指向新结点
p-prior = r;// 新结点的prior指向上一个结点
r = r-next; // 上一个结点前进到新结点
}
p-next = head; // 指向头结点
head-prior = p;// head的prior指向最后的结点
}
void Show(DLinkList head) { // 正向显示链表数据
pDLink p = head-next;
while(p != head) {
printf("%d ",p-data);
p = p-next;
}
printf("\n");
}
void ShowR(DLinkList head) { // 反向显示数据
pDLink p = head-prior;
while(p != head) {
printf("%d ",p-data);
p = p-prior;
}
printf("\n");
}
int main() {
DLinkList head = GetEmptyDLink();
DLink_create(head,10);
printf("正向显示:\n");
Show(head);
printf("反向显示:\n");
ShowR(head);
return 0;
}
C语言循环链表的题,求指点
这个是以前写的,做成一个环,其N=10,M=3,我就是想改了,lz自己改吧
#includestdio.h
struct
serial
{
int
num;
struct
serial
*next;
};
void
main()
{
int
i;
struct
serial
peo[100],*p,*q;
for(i=0;i10;i++)
peo[i].num=i+1;
for(i=0;i9;i++)
peo[i].next=peo[i+1];
peo[9].next=peo;
q=p=peo;
while(p!=p-next
)
{
for(i=0;i2;i++)
{
q=p;
p=p-next;
}
q-next
=p-next
;
printf("被删除的元素:%-4d\n",p-num);
p=q-next
;
}
printf("\n最后报号出来的是原来的:%d\n",p-num);
getchar();
}
新闻标题:c语言循环链表函数,c语言循环单链表
文章转载:http://scyingshan.cn/article/dsssogp.html