c语言循环链表函数,c语言循环单链表

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://scyanting.com/article/dsssogp.html