【数据结构】链式线性表的几种常用用法
#include <stdio.h> #include <stdlib.h> #define maxsize 1024 #define OK 1 #define ERROR 0 typedef struct LNode { int data; struct LNode *next; }LNode; //声明函数 void out_l(LNode *l); //输出线性表 LNode *create_l(); //创建线性表 void insert_l(LNode *l); //插入元素 void delete_l(LNode *l); //删除元素 int search_l(LNode *l); //按值查找元素 void main() { int i; LNode *l; l = create_l(); //创建链式链表 out_l(l); //输出链表 //insert_l(l); //插入元素 //out_l(l); //输出链表 //delete_l(l); //删除元素 //out_l(l); //输出链表 i = search_l(l); //按值查找元素的位置 if(i == -1) { printf("输入的元素不存在!"); } else { printf("元素的位置为:%d",i); } } //按值查找元素 int search_l(LNode *l) { int x,i,j; LNode *h,*p; i = 0; printf("请输入查找的元素:"); scanf("%d",&x); h = l; while(h != NULL && h->data != x) { h = h->next; i++; } if(h != NULL) return(i); else return(-1); } //删除元素 void delete_l(LNode *l) { int i,j; LNode *p,*h; j=0; //j=0必须放在LNode *p,*h;语句的后面,如果放到前面会报错,不知道是什么原因 printf("请输入删除元素的位置:"); scanf("%d",&i); h = l; while(h != NULL && j < i - 1) { h = h->next; j++; } if(h == NULL || j > i - 1) { printf("输入的位置有问题!"); } else { h->next = h->next->next; } } //插入元素 void insert_l(LNode *l) { int i,j,x; LNode *p,*h; j = 0; h = l; printf("请输入插入的位置:\n"); scanf("%d",&i); printf("请输入插入的元素:\n"); scanf("%d",&x); while(h != NULL && j < i - 1) { h = h->next; j++; } if(h == NULL || j > i -1) { printf("输入的位置有误!"); } else { p = (LNode *)malloc(sizeof(LNode)); p->data = x; p->next = h->next; h->next = p; } } //创建链式线性表 LNode *create_l() //返回的是指针类型的所以要用到* { LNode *h,*p,*l,*w; int x; h = (LNode *)malloc(sizeof(LNode)); h->next = NULL; p = h; printf("请输入创建的值:"); scanf("%d",&x); while(x != -222) { l = (LNode *)malloc(sizeof(LNode)); l->data = x; l->next = NULL; p->next = l; p = l; printf("输入-222结束,其他则继续创建线性表;"); scanf("%d",&x); } return(h); } //输出链式线性表的值 void out_l(LNode *l) { LNode *p; p = l; p = p->next; //由于第一个节点是头结点不存数据时空的,所以要指向下一个节点才会有数据 while(p != NULL) { printf("%5d",p->data); p = p->next; } }
直接贴代码了,没什么技术含量;