用c语言实现异质链表
#include
#include
#include
#include
#include
typedef struct node *PNode;
typedef struct node
{
void *point;
int typeid;//数据类型标示。便于测试,我们设定 1 是 int,2 是 char
PNode next;
}Node;
Node *Createlist()
{
int val1, i, n,type;
char val2[20];
PNode head,p,q;
head = NULL;
printf("Please input the size of the list:\n");
scanf("%d", &n);
for (i=0;i
{
scanf("%d",&type);
p = (PNode)malloc(sizeof(Node));
switch(type)
{
case 1:{scanf("%d\n",&val1);p->point = (int*)val1;};break;
case 2:{scanf("%c\n",&val2);p->point = (char*)val2;};break;
}
p->next = NULL;
if (head == NULL)
q = head = p;
else{
q->next = p;
q = p;
}
return head;
}
}
void Print_List(Node *head)
{
PNode p;
p = head;
while (p!=NULL)
{
switch (p->typeid)
{
case 1:printf("%d ",(int*)(p->point));break;
case 2:printf("%d ",(char*)(p->point));break;
}
p = p->next;
}
}
int Insert(Node *head, int pos, const void *a, const int type)
{
PNode p,q;
int i;
p = head;
i = 0;
while (p!=NULL && i
{
p = p->next;
i++;
}
if (p==NULL || i>pos-1 ) return -1;
q = (PNode)malloc(sizeof(PNode));
if (q!=NULL)
{
q->point = (int*)a;
q->next = p->next;
q->typeid = type;
p->next = q;
return 1;
}
return -1;
}
int Delete(Node *head, int pos)
{
PNode p,q;
int i;
p = head;
i = 0;
while (p!=NULL && i
{
p = p->next;
i++;
}
if (p->next==NULL || i>pos-1)
return -1;
q = p->next;
p->next = q->next;
free(q);
return 1;