/*求一个节点的前驱、代码如下*/
#include<stdio.h>
#include<malloc.h>
typedef struct node /*定义结点的存储结构*/
{
int data;
struct node *next;
}NODE;
NODE *create_circular() /*此函数采用后插入方式建立单向循环链表,并返回一个指向链表表头的指针*/
{
NODE *head,*q,*p; /*定义指针变量*/
int a,n;
head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
q=head;
printf("\nInput number of the list: ");
scanf("%d",&n); /*输入单向链表结点个数*/
head->data=n; /*表头结点赋值n,即表中结点个数*/
if(n>0) /*若n<=0,建立仅含表头结点的空表*/
{
printf("Input the list :");
while(n>0)
{
scanf("%d",&a); /*输入新元素*/
p=(NODE*)malloc(sizeof(NODE));
p->data=a;
q->next=p;
q=p;
n--;
}
}
q->next=head;
return(head); /*返回表头指针head*/
}
NODE *prior(NODE *p)
{
NODE *q;
q=p->next;
while(q->next!=p)
q=q->next;
return(q);
}
main() /*主程序*/
{
NODE *a,*c,*p;
int i,j;
a=create_circular(); /*建立单向循环链表*/
printf("Input j:"); /*给出单向循环链表中的结点序号,表头结点序号为0*/
scanf("%d",&j); /*j的取值为:0~表中的结点个数*/
p=a;
for(i=0;i<j;i++)
p=p->next; /*按序号确定一个p结点*/
c=prior(p);
printf("prior of %d is : %d",p->data,c->data);
}