链表必须自己设置一个头结点的,一般在第一个元素插入的时候定义。
此后不能再修改,知道链表删除为止。
插入的时候,取一个指针,读头结点,找到插入位置,再插入。
不能使用头结点寻找,往下递归。
即:listhead = listhead->next 这种用法错误。
使用: p = listhead
p = p->next
头结点,就是listhead
//定义队列结构体typedef struct Qnode
{
int data
struct Qnode *next
} Queue , *QueuePtr
typedef struct
{
QueuePtr front
QueuePtr rear
} linkQnode
//创建一个队列
initQueue (linkQnode *q)
{
q ->front = q ->rear = (QueuePtr) malloc (sizeof (Queue))
if (!q ->front) exit (0)
q ->front ->next = NULL
}
//入队列
EnterQueue (linkQnode *q , int item)
{
QueuePtr p
p = (QueuePtr) malloc (sizeof (Queue))
if (!p) exit (0)
p ->data = item
p ->next = NULL
q ->rear ->next = p
q ->rear = p
}
//出队列
DelQueue (linkQnode *q , int *item)
{
QueuePtr p
if (q ->front = q ->rear) return
p = q ->front ->next
*item = p ->data
q ->front ->next = p ->next
if (q ->rear == p)
q ->rear = q ->front
free (p)
}
#defineMAXSIZE
100
typedef
int
datatype
typedef
struct{
datatype
a[MAXSIZE]
int
front
int
rear
}seqqueue
/*队列置空*/
void
initseqqueue(seqqueue
*p)
{
p->front=p->rear=0
}
/*判断队列是否这空*/
int
isemptyseqque(seqqueue
*p)
{
return(p->front==p->rear?1:0)
}
/*输出队列中的元素*/
void
outputseqqueue(seqqueue
*p)
{
int
i
if(isemptyseqqueue(p)){printf("\nThe
sequece
queue
is
empty\n")exit(1)}
for(i=p->fronti<p->reari++)
printf("%5d",p->a[i])
}
/*取得队列首结点值*/
datatype
getfirstseqqueue(seqqueue
*p)
{
if(isemptyseqqueue(p)){printf("\nThe
sequece
queue
is
empty\n")exit(1)}
return
p->a[p->front]
}
/*给队列插入一个结点*/
void
insertseqqueue(seqqueue
*p)
{
int
i
if(p->rear==MAXSIZE){printf("\nThe
sequece
queue
is
full\n")exit(1)}
p->a[p->rear]=x
p->rear++
}
/*删除队列中的第一个结点*/
void
delseqqueue(seqqueue
*p)
{
if(isemptyseqqueue(p)){printf("\nThe
sequece
queue
is
empty\n")exit(1)}
p->front++
}
自己再编一下main()函数应该差不多啦