本篇文章给大家谈谈双向链表插入节点c语言,以及c语言双向链表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、使用C语言实现双向链表的建立、删除和插入2、怎样用c语言实现一个双向链表?3、关于C语言数据结构双向链表插入节点的一点问题4、C语言实现的双向链表插入程序
使用C语言实现双向链表的建立、删除和插入
#includestdio.h
#includestdlib.h
#includemalloc.h
struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;
link push(int item){
link newnode=(link)malloc(sizeof(node));
newnode-data=item;
if(head==NULL)
{
head=newnode;
head-next=NULL;
head-pre=NULL;
rear=head;
}
else
{
rear-next=newnode;
newnode-pre=rear;
newnode-next=NULL;
rear=newnode;
}
return head;
}
void makenull(){
front=NULL;
rear=NULL;
}
empty(){
if(front==NULL)
return 1;
else
return 0;
}
int tops(){
if(empty())
return NULL;
else
return rear-data;
}
void pop(){
if(empty())
printf(“stack is empty!\n”);
else
rear=rear-pre;
}
void display(link l){
link p;
p=l;
while(p!=NULL){
printf(“%d-“,p-data);
p=p-next;
}
}
void main(){
int n,i;
printf(“input your first data!\n”);
scanf(“%d”,n);
front=push(n);
/*another data*/
for(i=0;i3;i++)
{
printf(“input:\n”);
scanf(“%d”,n);
push(n);
}
ptr=front;
display(ptr);
printf(“\n Please enter any key to pop”);
pop();
ptr=front;
display(ptr);
}
怎样用c语言实现一个双向链表?
双向链表的相关操作
实现功能:
1. 创建一个新链表。
2. 插入节点。
3. 删除节点。
4. 选择法排序链表(从小到大)。
5. 显示当前链表。
6. 退出程序
详细代码见参考资料
关于C语言数据结构双向链表插入节点的一点问题
很简单的双向链表的插入问题
s-prior=p-prior; //就是s的前驱指针指向p的前面节点,节点地址就是p-prior
现在p的前面节点的后驱指针就是 p-prior-next 指向 s 就行
现在 s的前驱指针操作完成, 然后就是操作s的后驱指针了
s的后驱指针就是s-next 指向 p
最后就是p的前驱指针 p-prior 指向 s节点就行,就完成插入了
C语言实现的双向链表插入程序
/*
创建函数和插入函数已全部重写,并在必要的地方增加了注释。 截图是在VC++ 6.0环境下的运行结果。
*/
#includestdio.h
#include stdlib.h
typedef struct node {
int i;
struct node *next,*prior;
}s;
s *create_list() {
int a[] = {2,4,6,8,10},n = sizeof(a)/sizeof(a[0]);
s *p,*q,*head;
head = q = p = (s *)malloc(sizeof(s));
head-i = 0; // 0作为链表头结点数据
p-next = q-prior = NULL;
while(–n = 0) {
q = (s *)malloc(sizeof(s));
q-i = a[n];
p-next = q;
q-prior = p;
p = q; // p下移到新结点
}
p-next = NULL;
return head;
}
void insert_list(s *head,int c) {
s *q,*p = head;
q = (s *)malloc(sizeof(s));
q-i = c;
while((p-next != NULL) (p-next-i c)) p = p-next;
if(p-next-i c) { // 插在表中间
q-next = p-next;
p-next-prior = q;
q-prior = p;
p-next = q;
}
else if(p-next == NULL) { // 插在尾部
p-next = q;
q-prior = p;
q-next = NULL;
}
// 如果表中已有元素同样大小的i = c,则无息返回。
}
void printf_list(s *head) {
s *p = head;
int n = 0;
while(p-next != NULL) {
printf(“%3d : %3d\n”,n + 1,p-next-i);
p = p-next;
n++;
}
printf(“\n”);
}
main() {
struct node *head;
int c;
//clrscr();
head = create_list();
printf_list(head);
printf(“请输入插入的数据 : “);
scanf(“%d”,c);
insert_list(head,c);
printf_list(head);
return 0;
}
关于双向链表插入节点c语言和c语言双向链表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。