您的位置:首页 > 理论基础 > 数据结构算法

双向链表的插入、删除、遍历

2017-07-17 15:44 218 查看
在这里我遇到过问题就是忘记把指针指向链表的头。。。。。导致程序一直挂掉
#include <stdio.h>
#include <stdlib.h>

struct STU
{
int data;
struct STU *last;//前
struct STU *next;//后

};

struct STU *Creatlink_t(int n);
void pri_Link(struct STU *phead);
void in_Link(struct STU *phead,int n);
void delete_Link(struct STU *phead);

int main()
{
int i;
struct STU *phead;
printf("输入n个学生的信息");
scanf("%d",&i);
phead=Creatlink_t(i);
pri_Link(phead);
in_Link(phead,i);
pri_Link(phead);
delete_Link(phead);
pri_Link(phead);
}

struct STU *Creatlink_t(int n)
{
int i;
struct STU *phead;
struct STU *p;
struct STU *pt;

for(i=1;i<=n;i++)
{
p=(struct STU *)malloc(sizeof(struct STU));
printf("输入第%d元素:",i);
scanf("%d",&p->data);
if(i==1)
{
phead=p;
p->last=NULL;
p->next=NULL;
pt=p;
}
else
{
pt->next=p;
p->last=pt;
pt=p;
}

}
p->next=NULL;
return phead;
};

void pri_Link(struct STU *phead)
{
if(phead==NULL)
{
printf("链表为空\n");
return ;
}
struct STU *p;
p=phead;
while(p!=NULL)
{
printf("%d \n",p->data);
p=p->next;
}
printf("\n");
}

void in_Link(struct STU *phead,int n)
{
struct STU *pt;
pt=phead;
int i,num,l;

printf("请输入插入位置:");
scanf("%d",&l);
printf("请输入插入元素的值:");
scanf("%d",&num);
for(i = 1;i < l-1; i++)
pt = pt->next;
struct STU *p=(struct STU *)malloc(sizeof(struct STU ));

//    while(p)
//    {
p->data=num;
p->next=pt->next;
pt->next->last=p;
p->last=pt;
pt->next=p;

}

void delete_Link(struct STU *phead)
{
struct STU *p;
p=phead;
int nd,tempi=1;
printf("输入删除的值\n");
scanf("%d",&nd);
while((tempi++) != nd && p != NULL)
{
p = p->next;
}
if(p == NULL)
printf("位置不合法。\n");
else if(p->next == NULL)
{
p->last->next = NULL;
free(p);
}
else
{
p->last->next=p->next;
p->next->last=p->last;
free(p);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐