單鏈表結構:
typedef struct node
{
int data;
struct node *next;
}node;
typedef struct node *LinkList;
/*創建單鏈表,將新的節點插入到鏈表的尾部*/
createList(LinkList L, int n)
{
LinkList p,r; //p節點用來接收插入的元素,r是尾節點
int i;
srand(time(0));
L=(LinkList)malloc(sizeof(node));
r=L->next; //r指向L的尾部
for(i=0;i<ni++)
{
p=(LinkList)malloc(sizeof(node));
p->data=rand()%100+1;
r->next=p; //r指向P
r=p; //將r指向新的尾節點
}
r->next=NULL;
return 0;
}
//get the element in the location i
GetElem(LinkList L, int i, int *e)
{
LinkList p; //定義一個指向節點的指針
p=L->next; //p指向鏈表的第一個節點
int j=1;
while(p&&j<i)
{
p=p->next; //如果P不為空(沒有到鏈表尾部)或者計數器仍然沒有到i則p就往前一步
j++;
}
if(j<i||!p)
return 0;
*e=p->data;
return 0;
}
//鏈表插入,將e插入鏈表的第i個位置
void ElemInsert(LinkList L, int i, int e)
{
LinkList p,s;
int j=1;
//首先找到
p=L->next;
while(p&&j<i)
{
p=p->next;
j++;
}
//生成一個新節點
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
}
//鏈表刪除,刪除第i+1個節點
void ElemDelete(LinkList L, int i, int e)
{
LinkList p,q;
int j=1;
p=L->next;
while(p&&j<i)
{
p=p->next;
j++
}
//考慮一些可能出錯的情況
q=p->next;
p->next=q->next;
e=q->data;
free(q); /很重要
}
?