分类: C/C++
2011-05-16 16:06:33
/*
* 简单实现单链表功能
* Lzy 2011-5-15
*/
#include
typedef struct node
{
int data;
struct node *next;
}LinkList;
LinkList *LinkListCreat()
{
LinkList *head, *p1,*p2;
head = (LinkList *)malloc(sizeof(LinkList)); /*创建头结点,不保存数据*/
p1 = head; /*p1指向头结点*/
while(1)
{
p2 = (LinkList *)malloc(sizeof(LinkList)); /*分配新的空间*/
printf("输入要保存的数据:");
scanf("%d",&p2->data); /*保存数据*/
if(p2->data == -1) /*结束输入*/
break;
p2->next = NULL; /*尾指针置空*/
p1->next = p2; /*添加到链表未尾*/
p1 = p2;
}
return head;
}
LinkList *ElemLocatebyNum(LinkList *p,int n)
{
while(n--)
{
p = p->next;
if(p == NULL)
return 0;
}
return p;
}
int LinkListInsert(LinkList *p,int n, int i)
{
LinkList *ptr = (LinkList *)malloc(sizeof(LinkList));
p = ElemLocatebyNum(p,n); /*查找节点*/
if(p == 0)
return 0;
else
{
ptr->data = i; /*插入数据*/
ptr->next = p->next; /*将插入位置的后继结点指针域赋给新节点指针域*/
p->next = ptr; /*将插入位置指针域更改为新节点的指针*/
}
return 1;
}
int LinkListDelete(LinkList *p,int n)
{
LinkList *ptr = (LinkList *)malloc(sizeof(LinkList));
p = ElemLocatebyNum(p,n);
if(p == 0)
return 0;
ptr = p->next; /*找到要删除的节点*/
p->next = ptr->next; /*删除该节点*/
free(ptr); /*释放空间*/
return 1;
}
int main()
{
LinkList *p, *head;
head = LinkListCreat(); /*创建链表*/
p = ElemLocatebyNum(head,2); /*查找链表中第二个元素*/
printf("找到元素:%d\n",p->data);
LinkListInsert(head,3,10); /*在第三个元素后插入元素10*/
p = head;
while(p->next)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
LinkListDelete(head,6); /*删除第6个元素*/
p = head;
while(p->next)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
return 0;
}
——第二部分:Linux C