(1)、单链表的建立。先建立头结点head,将头结点的指针域置为空;然后新建一个结点p, 把此新结点链接到单链表的尾端或始端。
(2)、单链表的插入。新建一个结点p,指定插入位置;从单链表头开始查找结点位置。
(3)、单链表的删除。指定删除位置;从单链表头开始查找结点位置。
这是学数据结构的第一个实验,很简单,不过当初也是花了一点心血了,呵呵
#include <stdio.h>
#include <conio.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList;
LinkList CreatLinkList(void)
{
LinkList H,p,q;
int n,i;
H=(LinkList)malloc(sizeof(LNode));
if(H)
H->next=NULL;
p=H;
printf("please input the number of linklist: ");
scanf("%d",&n);
printf("/n");
printf("please input the data:/n");
for(i=0;i<n;i++)
{
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data) ;
q->next=p->next;
p->next=q;
p=q;
}
return H;
} //尾插法建立链表
void printflist(LinkList H)
{
LinkList p;
p=H->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("/n");
} //输出函数
LinkList LocateLinkList(LinkList H,int i)
{
LinkList p;
int j;
p=H;
j=0;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j!=i||!p)
{
printf("the i is error or linklist is not exsist");
return(NULL);
}
return(p);
} //查找
void InsertLinkList(LinkList H,int i,int x)
{
LinkList p,q;
p=LocateLinkList(H,i-1);
if(!p)
{
printf("i is error");
return(0);
}
q=(LinkList)malloc(sizeof(LNode));
if(!q)
{
printf("apply space not success");
return(0);
}
q->data=x;
q->next=p->next;
p->next=q;
printflist(H);
} // 插入
void DelLinkList(LinkList H,int i)
{
LinkList p,q;
if(!H->next)
{
printf("the list can not be deleted");
return(0);
}
p=LocateLinkList(H,i-1);
if(!p)
{
printf("i is error");
return(0);
}
q=p->next;
p->next=q->next;
free(q);
printflist(H);
} //删除
main()
{
LinkList head;
int x,i;
head=CreatLinkList();
printf("the primate list is:/n");
printflist(head);
printf("please input the insert position/n");
scanf("%d",&i);
printf("please input the insert data/n");
scanf("%d",&x);
printf("the list after inserting a num is:/n");
InsertLinkList(head,i,x);
printf("please input the delete position/n");
scanf("%d",&i);
printf("the list after deleting a num is:/n");
DelLinkList(head,i);
getch();
}