线性链表的定义与元素插入、删除的操作实现
来源:互联网 发布:知天气决策 编辑:程序博客网 时间:2024/06/17 15:25
优点:线性链表可以迅速实现元素的插入与删除,优化分配了表元素的存储空间
缺点:表元素占用内存空间不连续,对表元素排序最好用顺序表实现
#define NULL 0#include<stdio.h>#include<stdlib.h>typedef struct Node{ ////////定义结构体/////////////////////////// int e; struct Node *next; }Node,*DLB; void Xinjian(DLB &L){ /////////建立一个 空链表/////////////////// L=(DLB)malloc(sizeof(Node)); L->next=NULL;}//Xjianvoid Cunbiao(DLB &L,int n){ //存储长度为n的线性表 Node *p,*q; int i; q=L; for(i=1;i<=n;i++) { p=(DLB)malloc(sizeof(Node)); scanf("%d",&p->e); //p->next=L->next; p->next=q->next; q->next=p; q=q->next; //L->next=p; }}//Cunbiaovoid Print(DLB L){ //打印输出 int i; while(L->next) { printf("%d ",L->next->e); L=L->next; } puts("");}void Incert(DLB &L,int t,int e){ //在位序为t的元素前插入一个新的元素e //注意这里默认插入位置是合法的,程序的健壮性由读者自己开发哦 int i; Node *p,*q; p=L; q=(DLB)malloc(sizeof(Node)); q->e=e; for(i=1;i<t;i++) { p=p->next; } q->next=p->next; p->next=q;}//Incertvoid Delet(DLB &L,int t,int &e){ //删除位序为t的线性表元素并用e返回被删元素的值 int i; Node *p,*q; p=L; q=L; for(i=1;i<=t;i++) { if(i<t)p=p->next; q=q->next; } e=q->e; p->next=q->next; free(q);} int main(){ DLB L; int n,e1,e2,E,e; Xinjian(L); printf("请输入单链表长度:\n"); scanf("%d",&n); Cunbiao(L,n); Print(L); printf("请输入插入元素位置与插入元素的值:\n"); scanf("%d %d",&e1,&E); Incert(L,e1,E); Print(L); printf("请输入删除元素位置:\n"); scanf("%d",&e2); Delet(L,e2,e); printf("被删除元素的值为%d\n",e); Print(L); system("pause"); return 0;}