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