#include <stdio.h>
#include <stdlib.h>
//結構體
typedef struct node
{
int data;
struct node *next;
} linklist;
//建立節點
linklist * createnode(int n)
{
linklist *l;
l=(linklist *)malloc(sizeof(linklist));
l->data=n;
l->next=NULL;
return l;
}
//初始化頭結點
linklist * initlink()
{
linklist *head;
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
return head;
}
//建立單連結清單(尾插法)
linklist *createlink()
{
linklist *cur,*new,*head;
int i,n,x;
head=initlink();
if(head==NULL)
{
return NULL;
}
cur=head;
printf("請輸傳入連結表長度:");
scanf("%d",&x);
for(i=0;i<x;i++)
{
printf("請輸入資料:");
scanf("%d",&n);
new=createnode(n);
cur->next=new;
cur=cur->next;
}
return head;
}
//查找第j個結點,用e傳回結點裡的值
int searchnode(linklist *head,int j,int *e)
{
linklist *l=head->next;
int i=1;
while(l&&i<j)
{
l=l->next;
i++;
}
if(l==NULL||i!=j)
{
return 0;
}
*e=l->data;
return 1;
}
//查找
int searchnode1(linklist *head,int e)
{
int i=0;
linklist *l=head;
while(l->next)
{
l=l->next;
i++;
if(e==l->data)
{
return i;
}
}
return 0;
}
//插入
int ListInsert(linklist *head,int i,int e)
{
linklist *p,*new;
int j;
p=head;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
{
return 0;
}
new=(linklist *)malloc(sizeof(linklist));
new->data=e;
new->next=p->next;
p->next=new;
return 1;
}
//删除
int listdel(linklist *head,int i,int *e)
{
int j=1;
linklist *p=head,*q;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!(p->next)||j>i)
{
return 0;
}
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return 1;
}
//列印單連結清單
void print(linklist *head)
{
linklist *p;
p=head;
while(p->next)
{
p=p->next;
printf("%d",p->data);
}
}
//主函數
int main()
{
int a,b,c,i;
linklist *head;
head=createlink();
if(head==NULL)
{
printf("建立失敗!\n");
}
else
{
printf("建立成功!\n");
}
printf("請輸入你要查找結點的位置:");
scanf("%d",&c);
a=searchnode(head,c,&b);
if(a==0)
{
printf("查找失敗!\n");
}
else
{
printf("查找成功!\n");
printf("b=%d\n",b);
}
printf("請輸入你要查找的資料:");
scanf("%d",&c);
a=searchnode1(head,c);
if(a==0)
{
printf("查找失敗!\n");
}
else
{
printf("查找成功!\n");
printf("a=%d\n",a);
}
printf("請輸入插入的位置:");
scanf("%d",&c);
printf("請輸入插入的資料:");
scanf("%d",&b);
a=ListInsert(head,c,b);
if(a==0)
{
printf("插入失敗!\n");
}
else
{
printf("插入成功!\n");
}
print(head);
printf("請輸入删除的位置:");
scanf("%d",&c);
a=listdel(head,c,&b);
if(a==0)
{
printf("删除失敗!\n");
}
else
{
printf("删除成功!\n");
}
print(head);
return 0;
}