这个程序就是我写的。但是插入不正确。插入后,元素总数反而减少了
#include<stdio.h>
#include<malloc.h>
typedef int DataType ;
typedef struct Node
{
DataType data;
struct Node *next;
}LNode, *PNode, *LinkList;
//建立链表
int InitList(LinkList *h)
{
*h = (LinkList)malloc(sizeof(LNode));
if (!h)
{
printf("初始化链表错了\n");
return 0;
}
(*h)->next = NULL;
return 1;
}
//表长
int ListLength (LinkList h)
{
int total = 0;
PNode p = h->next;
while(p)
{
total++;
p = p->next;
}
return total;
}
//判断空表
int ListEmpty(LinkList h)
{
if (h->next)
return 0;
else
return 1;
}
//插入
int ListInsret(LinkList h, int pos, DataType x) //pos 为插入的位置,x为待插入的元素
{
PNode p = h, q;
int i = 0;
while (p && i < pos -1) //p != NULL
{
p = p->next;
i++;
}
if (!p || i > pos - 1) //!p:p ==NULL
{
printf("插入的位置不合法");
return 0;
}
q = (PNode)malloc(sizeof(LNode)); //心结点
if (!q)
{
printf("不能生成新的节点");
return 0;
}
q ->data = x;
q->next = p->next;
p->next = q;
return 1;
}
//删除
int ListDelete(LinkList h, int pos, DataType *item) //pos删除位置,item返回被删除元素
{
PNode p = h, q;
int i = 0;
while (p->next && i < pos - 1)
{
p = p->next;
i++;
}
if (!p->next || i > pos - 1)
{
printf("删除的位置不合法");
return 0;
}
q = p->next;
p->next = q->next;
*item = q->data;
free(q);
return 1;
}
//查找
PNode Find(LinkList h, DataType item)
{
PNode p = h->next;
while (p && p->data!=item)
p = p->next;
return p;
}
//遍历
void Traverselist (LinkList h)
{
PNode p = h->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//主函数
int main(void)
{
int i, pos, x, pos1, item, qq;
int data[10];
LNode *kk;
LinkList h = NULL;
InitList(&h);
printf("请输入10个数值:");
for (i = 0; i < 10; i++)
{
scanf("%d", &data[i]);
}
for (i = 0; i < 7; i++)
{
if (!ListInsret(h, i+1, data[i]))
{
printf("插入操作错误!\n");
return 0;
}
}
printf("元链表:");
for (i = 0; i < 10; i++)
{
printf("%d ", data[i]);
}
printf( "\n");
//插入
printf("请输入插入的位置和元素:");
scanf("%d%d", &pos, &x);
if (!ListInsret(h, pos, x))
printf("erroe");
printf("插入之后的链表:");
Traverselist(h);
//删除
printf("请输入删除的位置:");
scanf("%d", &pos1);
if (!ListDelete(h, pos1, &item))
printf("erroe");
printf("删除之后的链表:");
Traverselist(h);
//查找
printf("请输入查找的数据 :");
scanf("%d", &qq);
kk = Find( h, qq);
printf("本链表有所输入的数据 :%d\n", kk->data);
return 0;
}