数据结构:单向循环链表,创建、打印、求结点sum域值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83352796

单向循环链表定义:

typedef struct node {
	int data, sum;
	struct node *next;
}LNode;

创建:

//创建链表
LNode* Create( int a[], int len)
{
	LNode* L;
	//创建头结点
	L = (LNode*)malloc(sizeof(LNode));
	L->data = a[0];
	L->sum = 0;
	L->next = L;

	LNode *prior, *pcur;
	prior = L;
	for (int i =1; i < len; i++)
	{
		pcur = (LNode*)malloc(sizeof(LNode));
		pcur->data = a[i];
		pcur->sum = 0;
		pcur->next = prior->next;
		prior->next = pcur;
		prior = pcur;
	}
	return L;
}

打印:

//打印链表
void Print(LNode* L)
{
	LNode* p;
	p = L->next;
	while (p != L)
	{
		printf("data:%d,sum:%d\n", p->data, p->sum);
		p = p->next;
	}
	//退出循环时,p==L
	printf("data:%d,sum:%d\n", p->data, p->sum);
}

求结点sum域值:

void FillSum(LNode* L)
{
	int temp;
	LNode *p, *q;
	p = L->next;
	while (p != L)
	{
		q = p;
		p = p->next;
		temp = 0;
		while (q != p)
		{
			temp =temp+ p->data;
			p = p->next;
		}
		//退出循环时,p=q
		p->sum = temp;
		p = p->next;

	}
	//计算L节点的sum值
	p = L->next;
	temp = 0;
	while (p != L)
	{
		temp = temp + p->data;
		p = p->next;		
	}
	L->sum = temp;
}

测试demo:

int main()
{
	int a[] = { 1,-1,2 };
	LNode* L=Create(a, 3);
	Print(L);
	FillSum(L);
	printf("*********求完sum后**********\n");
	Print(L);
	int aa = 0;
    return 0;
}

测试结果:

源代码:

// 2015_1_LinkList.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"

typedef struct node {
	int data, sum;
	struct node *next;
}LNode;
//创建链表
LNode* Create( int a[], int len)
{
	LNode* L;
	//创建头结点
	L = (LNode*)malloc(sizeof(LNode));
	L->data = a[0];
	L->sum = 0;
	L->next = L;

	LNode *prior, *pcur;
	prior = L;
	for (int i =1; i < len; i++)
	{
		pcur = (LNode*)malloc(sizeof(LNode));
		pcur->data = a[i];
		pcur->sum = 0;
		pcur->next = prior->next;
		prior->next = pcur;
		prior = pcur;
	}
	return L;
}
//打印链表
void Print(LNode* L)
{
	LNode* p;
	p = L->next;
	while (p != L)
	{
		printf("data:%d,sum:%d\n", p->data, p->sum);
		p = p->next;
	}
	//退出循环时,p==L
	printf("data:%d,sum:%d\n", p->data, p->sum);
}

void FillSum(LNode* L)
{
	int temp;
	LNode *p, *q;
	p = L->next;
	while (p != L)
	{
		q = p;
		p = p->next;
		temp = 0;
		while (q != p)
		{
			temp =temp+ p->data;
			p = p->next;
		}
		//退出循环时,p=q
		p->sum = temp;
		p = p->next;

	}
	//计算L节点的sum值
	p = L->next;
	temp = 0;
	while (p != L)
	{
		temp = temp + p->data;
		p = p->next;		
	}
	L->sum = temp;
}

int main()
{
	int a[] = { 1,-1,2 };
	LNode* L=Create(a, 3);
	Print(L);
	FillSum(L);
	printf("*********求完sum后**********\n");
	Print(L);
	int aa = 0;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/83352796