码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 链表学习笔记 2

时间:2015-04-28 02:08:22      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:include   元素   线性表   

Seqlish.h

#include<stdio.h>
#include<string.h>
#define MAXSIZE 100 //定义线性表的最大长度 

typedef struct  //定义顺序表结构
{
	DATA ListData [MAXSIZE+1];//保存顺序表的数组 
	int ListLen;			//	顺序表已存节点 的数量 
 } SeqListType;
 
 void SeqListInit (SeqListType *SL); // 初始化顺序表 
 int SeqListLength(SeqListType *SL); // 返回顺序表的元素 数量 
 int SeqListAdd(SeqListType *SL, DATA data); //  向顺序表中添加元素 
 int SeqListInsert (SeqListType *SL , int n , DATA data);// 向顺序表中插入元素 
 int SeqListDelete(SeqListType *SL, int n); // 删除顺序表中的元素 
 DATA *SeqListFindByNum(SeqListType *SL,int n);//根据序号返回元素  
 int SeqListFindByCont(SeqListType *SL, char *key);//按关键字查找 
 int SeqListAll(SeqListType *SL);//遍历顺序表中的内容

Seqlish.c

void SeqListInit(SeqListType *SL)//初始化顺序表 
{
	SL->ListLen=0; //初始化时,设置顺序表长度为零0
}
int SeqListLength(SeqListType *SL)//返回顺序表元素的数量 
{
	return (SL->ListLen);
}
int SeqListAdd(SeqListType *SL,DATA data)//增加元素到顺序表尾部 
{
	if(SL->ListLen>=MAXSIZE)
	{
		printf("顺序已满,不能再添加节点了!\n");// 顺序表已满 
		return 0;
	}
	SL->ListData[++SL->ListLen]=data;
	return 1;
}
int SeqListInsret(SeqListType *SL,int n,DATA data)
{
	int i;
	if(SL->ListLen>=MAXSIZE)	//顺序表节点数量已超过最大数量 
	{
		printf("顺序表已满,不能插入节点!\n");
		return 0;         //返回0表示插入不成功 
	}
	if(n<1 || n>SL->ListLen-1)   //插入节点序号不正确 
	{
		printf("插入元素序号错误,不能插入元素!\n");
		return 0;				// 返回0表示插入不成功 
	}
	for(i=SL->ListLen;i>=n;i--)          // 讲顺序表中的数据向后移动  
		SL->ListData[i+1] = SL->ListData[i];
	SL->ListData[n] = data; // 插入节点 
	SL->ListLen++;  // 顺序表节点数量增加 
	return 1;    // 返回成功插入  
}

int SeqListDelete(SeqListType *SL, int n)  // 删除顺序表中数据元素 
{
	int i;
	if(n<1 || n>SL->ListLen+1)
	{
		printf("删除节点序号错误,不能删除节点!\n");
		return 0;     // 返回0 , 表示删除不成功 
	}
	for(i=n;i<SL->ListLen;i++)   // 将顺序表中元素向前移动
		SL->ListData[i]=SL->ListData[i+1];
	SL->ListLen--;    // 顺序表元素数量减  
	return 1;       // 返回成功删除
}
DATA *SeqListFindByNum(SeqListType *SL , int n)  // 根据序号返回数据元素
{
	if(n<1 || n>SL->ListLen+1)   // 元素序号不正确 
	{
		printf("节点序号错误,不能返回节点!\n");
		return NULL;   // 返回0 , 表示不成功 
	}
	return &(SL->ListData[n]);
}

int SeqListFindByCont(SeqListType *SL, char *key)  // 按关键字查询节点?
{
	int i;
	for(i=1;i<=SL->ListLen;i++) 
		if(strcmp(SL->ListData[i].key,key)==0)  // 如果找到所需节点
			return i;        // 返回节点序号
	return 0; // 遍历后任没有找到,则返回0 
}

SeqlishTest.c

#include<stdio.h>
typedef struct 
{
	char key[15];  // 节点关键字  
	char name[20];
	int age;
}DATA;   // 定义节点类型 , 可定义为整型, 也可定义为结构 
#include "Seqlish.h"
#include "Seqlish.c"
int SeqListAll(SeqListType *SL)        // 遍历顺序表中的节点 
{
	int i;
	for(i=1;i<=SL->ListLen;i++)
		printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
int main()
{
	int i;
	SeqListType SL;        // 定义顺序表变量  
	DATA data, *data1;     //定义节点保存数据类型变量和指针变量 
	char key[15];      // 保存关键字  
	
	SeqListInit(&SL);    // 初始化顺序表  
	
	do{              // 循环添加节点数量  
		printf("输入添加的节点(学号 姓名 年龄):");
		fflush(stdin);     // 清空输入缓存区 
		scanf("%s%s%d",&data.key,&data.name,&data.age);
		if(data.age)
		{
			if(!SeqListAdd(&SL,data))
				break;
		}else 
			break;
			
	}while(1);
	printf("\n顺序表中节点的顺序为:\n");
	SeqListAll(&SL);
	
	fflush(stdin);
	printf("\n要取出节点的序号:");
	scanf("%d,&i");        // 输入节点序号  
	data1 = SeqListFindByNum(&SL,i);
	if(data1)
		printf("第%d个节点为: (%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
	
	fflush(stdin);
	printf("\n 要查找节点的关键字:") ;
	scanf("%s",key);  // 输入关键字  
	i=SeqListByCont(&SL,key);
	data1 = SeqListFindByNum(&SL,i);
	if(data1)       //若节点指针不为null 
		printf("第%d个节点为: (%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
	getch();
	return 0;
}


数据结构 链表学习笔记 2

标签:include   元素   线性表   

原文地址:http://9815936.blog.51cto.com/9805936/1639494

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!