C语言实现单链表的初始化、创建、遍历等操作
2013-07-29 10:22
531 查看
编译环境:VC++6.0
#include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; LinkList Init_LNode() //链表初始化 { LNode *L; L = (LinkList)malloc(sizeof(LNode)); if(L == NULL) { printf("初始化失败!\n"); exit(-1); } L->next = NULL; return L; } void Creat_List1(LNode *L) //头插法 { int i,n,num; LNode *pnew; printf("请输入要输入的元素个数:n = "); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入第%d个数:",i+1); scanf("%d",&num); pnew = (LinkList)malloc(sizeof(LNode)); pnew->data = num; pnew->next = L->next; L->next = pnew; } } void Creat_List(LNode *L) //创建 尾插法 { int i,n,num; LNode *p,*pnew; p = L; printf("请输入要输入的元素个数:n = "); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入第%d个数:",i+1); scanf("%d",&num); pnew = (LinkList)malloc(sizeof(LNode)); if(pnew == NULL) { printf("初始化失败!\n"); exit(-1); } pnew->data = num; p->next = pnew; p = pnew; } p->next =NULL; } void Show_Linst(LNode *L) //遍历 { LNode *p; p =L->next; while(p!=NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); } void Insert_List(LNode *L) //插入 { int i , n , val; LNode *p,*s; p = L; i=1; printf("请输入你要插入的位置:n="); scanf("%d",&n); printf("请输入你要插入的元素:val="); scanf("%d",&val); while(p&&i<n) { p = p->next; ++i; } if(!p || i>n) printf("无法插入!\n"); s = (LinkList)malloc(sizeof(LNode)); s->data = val; s->next = p->next; p->next = s; } void Delete_List(LNode *L) //删除 { int i , n ; LNode *p,*s; p = L; i=1; printf("请输入你要删除的位置:n="); scanf("%d",&n); while(p&&i<n) { p = p->next; ++i; } if(!(p->next) || i>n) printf("删除的位置不合法!\n"); // p->next =p->next->next; s = p->next; p->next = s->next; free(s); } void Query_List(LNode *L) //查询 { int i , n ,val; LNode *p; p = L->next; i=1; printf("请输入你要查询的位置:n="); scanf("%d",&n); while(p&&i<n) { p = p->next; ++i; } if(!(p->next) || i>n) printf("查询的元素不存在!\n"); val = p->data; printf("你查询的元素值为:%d\n",val); } void Destroy_List(LNode *L) //销毁 { LinkList p,q; p = L->next; //p指向第一个结点 while(p) { q = p->next; free(p); p = q; } L->next = NULL; } int Show_Menu() //主菜单 { int num; printf("********************************************\n"); printf("\n 【1】创建 【2】插入\n"); printf("\n 【3】删除 【4】查询\n"); printf("\n 【5】遍历 【6】退出\n"); printf("\n********************************************\n"); printf("请输入你的操作序号:"); if(scanf("%d",&num)==0) { printf("请重新输入!\n"); } return num; } int main(int argc,char *argv[]) { LinkList S; int val; S = Init_LNode(); if(S == NULL) { printf("初始化失败!\n"); } while(val!=6) { val = Show_Menu(); switch(val) { case 1: Creat_List(S); //尾插法 //Creat_List1(S); //头插法 break; case 2: Insert_List(S); //插入 break; case 3: Delete_List(S); //删除 break; case 4: Query_List(S); //查询 break; case 5: Show_Linst(S); //显示 break; case 6: Destroy_List(S); //销毁 exit(0); break; } } }
相关文章推荐
- c语言实现对传统单链表的创建、添加 遍历 删除 反转元素操作
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- 用C语言实现单链表的各种操作(一)
- Java实现二叉树的创建和遍历操作
- c语言:创建一个数组,分别实现函数初始化数组、 清空数组、数组元素的逆置
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- C语言单链表的创建、插入、查找、删除、求长、排序、遍历
- 用jquery实现cookie的操作以及创建js数组和遍历js数组,js对象,jquery.json的使用
- Java实现二叉树的创建和遍历操作(有更新)
- 二叉树的创建、前/中/后序遍历、按层遍历C语言实现
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历
- c语言:创建一个数组,分别实现函数初始化数组、 清空数组、数组元素的逆置
- 单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
- C语言实现单链表的各种操作
- 单链表各种操作的C语言实现(二)
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现