2020-09-03

tech2024-10-04  18

顺序表的链式实现(C语言)

//头文件 #include<stdio.h> #include<malloc.h> //定义结点 typedef struct node { int data; struct node *next; }Node,*LinkList; //初始化 void InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } //头插法 void HeadInsert(Node *L) { Node *s; char z; int x; do{ scanf("%d",&x); s=(LinkList)malloc(sizeof(Node)); s->data=x; s->next=L->next; L->next=s; }while((z=getchar())!='\n'); } //尾插法 void TailInsert(Node *L) { /* Node *q,*p; int k; char z; q=L; do { scanf("%d",&k); p=(LinkList)malloc(sizeof(Node)); p->data=k; q->next=p; q=p; }while((z=getchar())!='\n'); q->next=NULL;*/ int x; char z; Node *s,*r; r=L; do{ scanf("%d",&x); s=(LinkList)malloc(sizeof(Node)); s->data = x; r->next = s; r = s; }while((z=getchar())!='\n'); r->next=NULL; } //按序查找 int GetElem(Node *L,int i) { Node *p=L->next; int j=1; if(i==0) return 0; if(i<0) return -1; while(p&&j<i){ p=p->next; j++; } return p->data; } //插入 Node *Insert(Node *L,int index,int add) { Node *p=L->next,*s,*q; int i; for(i=1;i<index-1;i++){ p=p->next; if(p==NULL){ printf(" 插入无效"); return p; } } s=(LinkList)malloc(sizeof(Node)); s->data=add; s->next=p->next; p->next=s; return L;//p是修改的量,L是完整链表 } //删除 Node *Delete(Node *L,int i) { Node *p=L,*del; int j=1; while(p->next&&j<i) { p=p->next; ++j; } del = p->next; p->next=del->next; return L; } void print(Node *L) { Node *q,*p=L; q=p->next; while(q!=NULL) { printf("%d ",q->data); q=q->next; } printf("\n"); } main() { // int a; Node *p1 = NULL; InitList(&p1); TailInsert(p1); // HeadInsert(p1); // a=GetElem(p1,2); // printf("%d",a); // p1=Insert(p1,3,19); p1=Delete(p1,2); print(p1); return 0; }
最新回复(0)