永发信息网

C语言数据结构中有尾指针的单循环链表

答案:2  悬赏:0  手机版
解决时间 2021-02-06 12:07
  • 提问者网友:暗中人
  • 2021-02-06 05:24
C语言数据结构中有尾指针的单循环链表
#include
#include
#include
struct node
{
int date;
struct node *next;
};

void init(struct node** linklist);
//尾指针单循环链表函数
//尾指针单循环链表函数
void create11(node*);//
void printf11(node* linklist);
int main()
{
node* linklist;
int a1;
init(&linklist);
printf("-------------------------\n");
create11(linklist);
printf11(linklist);
return 0;
}
void printf11(node* linklist)
{
node *p=linklist->next->next;
while(p!=linklist->next)
{
printf("%d ",p->date);
p=p->next;
}
printf("\n");
}
void create11(node* linklist)
{
int n;
int date;
printf("input date total:");
scanf("%d",&n);
for(int i=0;i {
node *p;
p=(node*)malloc(sizeof(node));
if(!p)
exit(0);
printf("input %d date:",i+1);
scanf("%d",&date);
p->date=date;
p->next=linklist->next;
linklist->next=p;
linklist=p;
}
}
void init(struct node** linklist)
{
*linklist=(node*)malloc(sizeof(node));
if(!(*linklist))
exit(0);
(*linklist)->next=*linklist;
}
//为什么打印出来有乱码,应该怎么改正?
//并要求每次插入结点做为尾指针
最佳答案
  • 五星知识达人网友:拜訪者
  • 2021-02-06 06:59
单循环链表实现队列的出列操作的复杂度过高,因此推荐用带头指针的双向循环链表实现队列操作。
全部回答
  • 1楼网友:拜訪者
  • 2021-02-06 08:07
问题还不少,指针变量p,q在主函数中都没有值,如何运算,注意各个函数中定义的变量都是局部变量,只能在本函数中可见(使用),addtol()函数中的p和delete()中的q在main()中不可见,就是不能共用。main()函数中的语句: scanf("%d",&(p->code)); p->num=i;//p没有(值),这样容易出大问题 建议:首先你要有一个思路,想象一下,n个人手拉(链)手,从编号为1的人开始报数,执行约瑟夫循环过程。用两个函数完成,create_cl(linklist &l,int n)完成环(循环链表)的创建,第二个是约瑟夫循环过程(包括输出)。下面是我写的代码,你参考下 #include #include typedef struct lnode { int num; int code; lnode *next; }lnode,*linklist; void createlist(linklist &l,int n){ //创建带头结点的循环单链表 l=(linklist)malloc(sizeof(lnode)); l->next=l; linklist p,q=l; int i; for(i=1;i<=n;i++){ p=(linklist)malloc(sizeof(lnode)); if(!p) exit(0); p->num=i; printf("请输入第%d个人的密码值",i); scanf("%d",&p->code); p->next=q->next; q->next=p;q=p; } } void joseph(linklist l,int n){ linklist p=l,q; int count=0,m=p->next->code;//读取第一个人的密码 printf("\n出列序列:\n"); while(l->next!=l){ if(count==m-1){ q=p->next ;p->next =q->next ;//删除结点(出列) printf("%d\t",q->num); if(p->code<=0)exit(0); m=q->code;n--; free(q);count=0; }else{ p=p->next ; if(p->next==l)p=p->next;//报数时跳过头结点 count++; } } printf("\n"); } int main() { linklist l,p; int n=5; createlist(l,n); joseph(l,n); return 0; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯