单链表的插入、删除和查询:
程序代码:
#include<stdio.h> #include<stdlib.h> struct node { int date; struct node *next; }; int n; typedef struct node LNode,*Link; void creat(Link head,int n); void insert(Link head,int i,int m); void delet(Link head,int s); void getelm(Link head,int k); int main() { Link head,t; int a,i,m,s,k; head=(Link)malloc(sizeof(LNode)); head->next=NULL; printf("输入要输入元素的个数: \n"); scanf("%d",&n); printf("元素是:\n"); creat(head,n); t=head->next; printf("创建的链表:\n"); while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n输入要插入元素的位置、元素 :\n"); scanf("%d %d",&i,&m); insert(head,i,m); printf("插入后的链表是: \n"); t=head->next; while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n输入要删除元素的位置 :\n"); scanf("%d",&s); delet(head,s); printf("删除后的链表是:\n"); t=head->next; while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n输入要查询元素的位置 :\n"); scanf("%d",&k); printf("查询的元素是 :\n"); getelm(head,k); return 0; } void creat(Link head,int n) { Link p,rear=head; int a,i; for(i=0;i<n;i++) { scanf("%d",&a); p=(Link)malloc(sizeof(LNode)); p->date=a; rear->next=p; rear=p; } rear->next=NULL; } void insert(Link head,int i,int m) { Link q,p; int j=0; p=head; while(p!=NULL&&j<i-1) { j++; p=p->next; } q=(Link)malloc(sizeof(LNode)); q->date=m; q->next=p->next; p->next=q; } void delet(Link head,int s) { Link q,p; p=head; int j=0; while(p!=NULL&&j<s-1) { p=p->next; j++; } q=(Link)malloc(sizeof(LNode)); q=p->next; p->next=q->next; free(q); } void getelm(Link head,int k) { Link q,p; int j=0; p=head; while(p!=NULL&&j<k-1) { p=p->next; j++; } p=p->next; printf("%d\n",p->date); }
双向链表的插入、删除和查询:
程序代码:
#include<stdio.h> #include<stdlib.h> struct node { int date; struct node *next; struct node *prev; }; typedef struct node LNode ,*Link; void creat(Link head,int n); void insert(Link head,int i,int m); void delet(Link head,int s); void getelm(Link head,int k); int main() { Link head,t; int n,i,a,m,s,k; head=(Link)malloc(sizeof(LNode)); head->next=NULL; head->prev=NULL; printf("输入元素的个数 :\n"); scanf("%d",&n); printf("元素是:\n"); creat(head,n); t=head->next; printf("创建的双向链表是:\n"); while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n插入的位置、元素: \n"); scanf("%d %d",&i,&m); insert(head,i,m); printf("插入后的链表:\n"); t=head->next; while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n要删除元素的位置:\n"); scanf("%d",&s); delet(head,s); printf("输出删除后的链表:\n"); t=head->next; while(t!=NULL) { printf("%d ",t->date); t=t->next; } printf("\n输入要查询元素的位置:\n"); scanf("%d",&k); getelm(head,k); return 0; } void creat(Link head,int n) { Link q,p; int i,a; q=head; for(i=0;i<n;i++) { scanf("%d",&a); p=(Link)malloc(sizeof(LNode)); p->date=a; q->next=p; p->prev=q; q=p; } q->next=NULL; } void insert(Link head,int i,int m) { Link q,p; int j=0; p=head; while(p!=NULL&&j<i-1) { p=p->next; j++; } q=(Link)malloc(sizeof(LNode)); q->date=m; q->next=p->next; p->next=q; } void delet(Link head,int s) { Link q,p; int j=0; p=head; while(q!=NULL && j<s-1) { p=p->next; j++; } q=(Link)malloc(sizeof(LNode)); q=p->next; p->next=q->next; free(q); } void getelm(Link head,int k) { Link q,p; int j=0; p=head; while(p!=NULL && j<k-1) { p=p->next; j++; } p=p->next; printf("%d\n",p->date); }