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;
}