链表存储基本操作
2016-12-01 22:39
288 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> /*定义表示结点的结构体类型*/ typedef struct list { int data; struct list* next; }LIST; void add(int data); LIST* findBack(); void insertBack(LIST *p); void insert(int position,int data); void discs(int data); void returnvalue(); void del(int position); void change(int position,int data); void showMenu(); LIST head; //头结点 char ch; int count=0; //统计数据个数 int position; //位置 int main() { int select; head.next=NULL; //将头结点的next置为NULL while(1) { showMenu(); printf("请选择需要的操作:"); scanf("%d",&select); fflush(stdin); //清除键盘缓冲区 switch(select) //根据用户选择,调用相应函数完成 { case 1: case 2: case 3: case 4: case 0:exit(1); default:printf("输入错误!\n"); } system("pause"); } return 0; } /////////// 函数的定义 ////////// void add(int data) //添加 { LIST *p; p=(LIST *)malloc(sizeof(LIST)); //新建结点 count++; if(p == NULL) { printf("动态内存分配失败!"); return; } p->data = data; insertBack(p); } LIST* findBack() //查找尾结点地址 { LIST *p; p=&head; while(p->next!=NULL) { p=p->next; } return p; } void insertBack(LIST *p) //插入一个结点 { LIST *tail; tail = find c8b4 Back(); tail->next = p; p->next = NULL; return ; } void change(int position,int data) //改变 { LIST *p; p=&head; while(position) { p = p->next; position--; } p->data = data; } void insert(int position,int data) //插入 { LIST *p,*pre; p=(LIST *)malloc(sizeof(LIST)); if(position>(count+1)) { printf("超出插入位置范围!\n"); system("pause"); return; } pre=&head; //pre指向头结点 position--; while(position) { if(p!=NULL) { position--; pre = pre->next; //pre指向下一个结点 } } if(p!=NULL) { p->next = pre->next; pre->next = p; p->data = data; } } void del(int position) //删除 { LIST *p,*pre; pre=&head; //pre指向头结点 p=head.next; //p指向第一个结点 if(position < 0||position > count) { printf("你删除的位置不存在\n"); system("pause"); return; } position--; while(position) { position--; pre = pre->next; //p pre指向下一个结点 pre在p之前 p = p->next; } if(p!=NULL) { pre->next = p->next; free(p); } } void returnvalue() //反转 { LIST *p,*q,*headp; headp=&head; p=&head; p = p->next; while(p->next != NULL) { q = p->next; p->next = q->next; q->next = headp->next; headp->next = q; } p->next =headp; headp =p->next; p->next = NULL; printf("反转成功!\n"); system("pause"); } void showMenu() { system("cls"); /*清屏*/ return; }
相关文章推荐
- 数据结构_线性表_链式存储_单链表 的基本操作
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- bo2-9.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(2个)
- 使用C++链表来实现二叉树的存储和基本操作
- 单链表的存储结构及其基本操作的实现
- 数据结构之广义表(头尾链表存储)基本操作
- 数据结构(二)链表1:链式存储的基本操作
- bo2-4.cpp设立尾指针的单循环链表(存储结构由c2-2.h定义)的12个基本操作
- bo2-2.cpp 带有头结点的单链表(存储结构由c2-2.h定义)的基本操作(12个)
- 链表(链式存储)的基本操作
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 线性表的链式存储(单链表)的基本操作
- bo2-8.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(9个)
- bo3-4.c 用单链表的基本操作实现链队列(存储结构由c3-2.h定义)的基本操作(9个)
- 2007.08.24静态单链表的基本操作及顺序表和链表的比较
- bo2-5.cpp 带头结点的双向循环链表(存储结构由c2-4.h定义)的基本操作(14个)
- bo2-1.cpp 顺序表示的线性表(存储结构由c2-1.h定义)的基本操作(12个)
- bo2-7.cpp 多项式(存储结构由c2-6.h定义)的基本操作及算法
- bo2-6.cpp 具有实用意义的线性链表(存储结构由c2-5.h定义)的24个基本操作