【数据结构】--1.链表的基本操作和哈希表定义

C实现链表的基本操作

初始化 插入 删除  哈希表的定义 

//链表的基本操作 初始化 插入 删除  哈希表的定义
#include<iostream>

using namespace std;

typedef struct Node
{
	int data;
	struct Node*next;
}Node,*LinkList,LinkList1;

typedef struct Node
{
	int data;
	struct Node*next;
}Node,*LinkList;

//LinkList LinkInit()
//{
//	LinkList L;
//	L=(Node*)malloc(sizeof(Node));
//	if(L==NULL)
//		printf("failed");
//	L->next=NULL;
//	return L;
//}

//int GetElem(LinkList L,int i,int e)
//{
//	int j=1;
//	LinkList p;
//	p=L->next;
//	while(p&&j<i)
//	{
//		p=p->next;
//		++j;
//	}
//	if(!p||j>i)
//		return -1;
//	e=p->data;
//	return e;
//}

void LinkListInsert(LinkList *L,int i,int e)
{
	LinkList p,q;
	p=*L;
	for(int j=1;j<i;j++)
	{
		p=p->next;
	}
	q=(Node*)malloc(sizeof(Node));
	q->data=e;
	q->next=p->next;
	p->next=q;

}

LinkList LinkListDelete(LinkList *L,int i,int *e)
{
	LinkList p,q;
	p=*L;
	for(int j=1;j<i;j++)
		p=p->next;
	q=p->next;
	p->next=q->next;
	*e=q->data;
	free(q);
	return *L;
}
//链表的初始化
LinkList LinkInit()
{
	Node* L;  //Node L 和Node *L 的区别
	L=(Node*)malloc(sizeof(Node));
	if(L==NULL)
		printf("failed");
	L->next=NULL;
		return L;
}

//链表的读取
int GetElem(LinkList L,int i,int e)
{
	int j=1;
	LinkList K;
	K=L->next;
	while(K&&j<i)
	{
		K=K->next;
		j++;
	}
	if(!K||j>i)
		return -1;
	e=K->data;
	return e;
}

//链表的插入
void LinkListInsert(LinkList *L,int i,int x)
{
	LinkList p;
	p=*L;
	for(int j=1;j<i;j++)
	{
		p=p->next;
	}
	LinkList m;
	m=(Node*)malloc(sizeof(Node));
	m->data=x;
	m->next=p->next;
	p->next=m;
	return ;
}

//链表的删除
LinkList LinkListDelte(LinkList*L,int i,int*e)
{
	LinkList p,q;
	p=*L;
	for(int j=1;j<i;j++)
	{
		p=p->next;
	}
	//q=(Node*)malloc(sizeof(Node));
	q=p->next;
	p->next=q->next;
	*e=q->data;
	free(q);
	return *L;
}

//链表的尾插法
LinkList1 *LinkListTail(LinkList1*L,int value)
{
	LinkList1 *p,*r;
	r=L;
	p=(LinkList1*)malloc(sizeof(LinkList1));
	p->data=value;
	while(r->next!=NULL)
		r=r->next;

	r->next=p;
	r=p;
	r->next=NULL;
	return L;
}

//尾插法
LinkList * LinkListTail(LinkList *L,int value)
{
	LinkList p,q;
	q=*L;
	p=(Node*)malloc(sizeof(Node));
	p->data=value;
	while(q->next!=NULL)
		q=q->next;
	q->next=p;
	q=p;
	q->next=NULL;
	return L;

}

//哈希表
#define SUCESS 1
#define UNSUCESS 0
#define HASHSIZE 12
#define NULLKEY -32768
typedef struct HashTable
{
	int *elem;
	int count;
}HashTable;
int m=0;
//初始化
void InitHashTable(HashTable *H)
{
	m=HASHSIZE;
	H->count=m;
	H->elem=(int*)malloc(m*sizeof(int));
	for(int i=0;i<m;i++)
	{
		H->elem[i]=NULLKEY;
	}
	return;
}
//散列函数
int Hash(int data)
{ 
//除留余数法
	return data % m;
}
//插入关键字
void InsertHashTable(HashTable*H,int key)
{
	int addr=Hash(key);
	while(H->elem[addr]!=NULLKEY)
		addr=(addr+1)%m;
	H->elem[addr]=key;
}
//散列表中查找关键字
int SearchHashTable(HashTable*H,int key)
{
	int addr=Hash(key);
	while(H->elem[addr]!=key)
	{
		addr=(addr+1)%m;
		if(H->elem[addr]==NULLKEY||addr==Hash(key))
			return UNSUCESS;
	}
	return SUCESS;
}

int main()
{
	

	return 0;
}

猜你喜欢

转载自blog.csdn.net/wxq_1993/article/details/82890740