教学内容:
循环双链表
建立循环双链表
循环链表里插入结点
遍历循环链表
双向链表结构定义
struct stu_data
{
char name[256];//学生名字
struct mytime stuTime;//签到时间
struct stu_data* front; //指向前一个结点
struct stu_data* back; //指向后一个结点
} ;
建立双向链表
头指针Head
尾部指针Tail
插入结点
//建立头结点
Head=tail=p= malloc(sizeof( struct stu_data)); //
memset(stu,0,sizeof( struct stu_data)); //初始化内存区域
//尾部插入新结点 操作
stu= malloc(sizeof( struct stu_data)); //分配结点内存空间
memset(stu,0,sizeof( struct stu_data)); //初始化内存区域
//结点数据填充。。。
stu->front=p; //新结点指向前驱
stu->back=NULL; //新结点尾指针置空
p->back=stu; //前驱结点back指针指向新结点
p=stu; //重要移动标志指针
tail=stu;//可有可无的
//循环链表
Head->front=tail;
tail->back=Head;
A= Head front back
0 0 0 NULL B
B
0 0 0 A C
C
0 0 0 B NULL
//
A= Head front back
0 0 0 D B
B
0 0 0 A C
C
0 0 0 B D
D
0 0 0 C A
遍历链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdarg.h>
#include <time.h>
int main(int argn,char* argv[])// int a[1]//a[0]
{
struct mytime
{
//char name[256];
int hour;//时
int min; //分
int sec; //秒
};
struct stu_data
{
char name[256];//学生名字
struct mytime stuTime;//签到时间
struct stu_data* front; //指向前一个结点
struct stu_data* back; //指向后一个结点
} ;
struct mytime t2;
struct stu_data *stu,*p,*Head,*tail;
time_t t;// long int
struct tm * timfo;
int i;
//建立Head头结点
Head=p=tail=malloc(sizeof( struct stu_data)); //256+12=268
memset(p,0,sizeof( struct stu_data));
strcpy(Head->name,"头结点");
do
{//插入新的结点
stu= malloc(sizeof( struct stu_data)); //
memset(stu,0,sizeof( struct stu_data)); //初始化内存区域
//stu->back=NULL; //新结点尾指针置空
//p->back=stu; //前驱结点back指针指向新结点
//p=stu; //重要移动标志指针
stu->front=p; //新结点指向前驱 2
stu->back=NULL; //新结点尾指针置空
p->back=stu; //前驱结点back指针指向新结点
p=stu; //重要移动标志指针
tail=stu;//可有可无的 2
scanf("%s",&stu->name);
time(&t);
timfo= localtime(&t); //取当前系统时间
stu->stuTime.hour=timfo->tm_hour;//时
stu->stuTime.min=timfo->tm_min;//分
stu->stuTime.sec=timfo->tm_sec;//秒
//构建循环链表
Head->front=stu;
tail->back=Head;
} while(strcmpi(stu->name,"exit")!=0);
//初始指针p 使他头结点Head
stu=Head->back;
do
{
printf("%s,到校时间:%d时%d分%d秒\n",stu->name, stu->stuTime.hour, stu->stuTime.min, stu->stuTime.sec);
stu=stu->back;
} while (strcmpi(stu->name,"exit"));
//初始指针p 使他尾部结点tail
stu=tail->front;
do
{
printf("%s,到校时间:%d时%d分%d秒\n",stu->name, stu->stuTime.hour, stu->stuTime.min, stu->stuTime.sec);
stu=stu->front;
} while ( stu!=Head);
getchar();
getchar();
return 0;
}