数据结构—单链表的部分基本操作(C语言)
来源:互联网 发布:知网查重数据库 编辑:程序博客网 时间:2024/05/17 20:33
*文件名:status.h
*描述:基本全局变量的头文件
*************************************/
#ifndef STATUS_H
#define STATUS_H
#define OK 1
#define OVERFLOW -2#define ERROR 0
#define TRUE 1
#define FALSE 0
#define NULL 0
typedef int Status;typedef unsigned int size_t;
#endif
/************************************
*描述:实现单链表的创建InitList_Link、打印PrintList_Link、插入ListInsert_Link、删除ListDelete_Link、定位LocateElem_Link等基本操作,然后求:
将两个带有表头结点的有序单链表La、Lb,编写出将La、Lb合并成一个有序链表Lc的算法。
*************************************/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include"status.h"
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status CreateList(LinkList *L,int n)//创建一个带头结点,长度为n(头结点不包含在内)的单链表
{
int i;
LinkList p,q;
ElemType c;
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
*L=q=p;/*???*/
printf("请输入数据");
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
c=getche();
p->data=c;
p->next=NULL;
q->next=p;
q=p;
}
return OK;
}
Status Init(LinkList *L) /*初始化一个链表*/
{
int n;
printf("Please input the number of the node : ");
scanf("%d", &n);
CreateList(L, n);
return OK;
}
void Printlk(LinkList L)/*打印输出线性表*/
{
LinkList p;
p=L->next;
printf("\n");
while(p)
{
printf("%c ",p->data);
p=p->next;
}
printf("NULL\n");/*最后输出一个NULL????*/
}
Status InsertList(LinkList L,int i,ElemType e)/*将元素e插入到第i个元素之前,e成为第i个元素*/
{
LinkList p,s;
int j;
p=L;
j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status Insert(LinkList L) /*接收插入数据,调用插入操作*/
{
int i;
ElemType data;
printf("Please input the position : ");
scanf("%d", &i);
printf("Please input the data : ");
data = getche();
InsertList(L,i,data);
return OK;
}
Status ListDelete(LinkList L,int i)/*删除第i个元素,由e返回其值*/
{
ElemType e;
LinkList p,q;
p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
Status Delete(LinkList L)//接收需要删除的数据,进行删除操作
{
int i;
printf("Please input the position : ");
scanf("%d", &i);
ListDelete(L,i);
return OK;
}
void MergeList(LinkList L1, LinkList L2, LinkList L3)//已知La Lb按非递减顺序排列
{
LinkList pa, pb, pc;//合并后Lc按非递减顺序排列
pa=L1->next;pb=L2->next;//pa,pb分别指向第一个结点
pc=L3;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next = pa? pa: pb;
L1->next=NULL;
L2->next=NULL;
}
void MenuList( )
{
printf("\n\n1:插入数据到La \n2:插入数据到Lb \n3:删除La中的元素 \n4:删除Lb中的元素 \n5:合并La Lb,并打印合并后的新线性表 \n6:打印La,Lb \n7:退出\n");
}
void MenuSelect(LinkList La,LinkList Lb)
{
int select, done=1;
LinkList Lc;
while (done) {
MenuList( );
printf("input the operating code : ");
scanf("%d", &select);
switch(select)
{
case 1: Insert(La);break;
case 2: Insert(Lb);break;
case 3: Delete(La);break;
case 4: Delete(Lb);break;
case 5: CreateList(&Lc, 0);MergeList(La, Lb, Lc);
printf("LC: ");Printlk(Lc); break;
case 6: printf("LA: ");Printlk(La);
printf("LB: "); Printlk(Lb);break;
case 7: done=0; break;
default: printf(" ERROR\n"); }
}
}
int main()
{
LinkList La,Lb;
printf("La\n");
Init(&La);
Printlk(La);
printf("Lb\n");
Init(&Lb);
Printlk(Lb);
MenuSelect(La,Lb);
return 0;
}
初学者不入行家法眼,望指正。
- 数据结构—单链表的部分基本操作(C语言)
- 数据结构--单链表的基本操作(C语言实现)
- 数据结构--单链表的基本操作(C语言实现)
- C语言-单链表的基本操作-严蔚敏版的数据结构
- 数据结构栈的基本的操作(C语言)
- C语言数据结构单链表的一些基本操作
- 《数据结构与算法》-单链表基本操作的C语言实现
- 数据结构 (C语言)顺序表的基本操作
- C语言(数据结构) - 链表的基本操作
- C语言(数据结构) - 双向链表的基本操作
- 数据结构 线性表的基本操作(C语言)
- 数据结构 链表的基本操作(C语言)
- 数据结构循环队列的基本操作(C语言)
- 数据结构---C语言单链表基本操作
- 数据结构.二叉树的基本操作(C语言实现)
- C语言数据结构之线性表的基本操作
- 【基本数据结构】C语言基于数组的栈操作
- 算法与数据结构-堆的基本操作C语言实现
- locking stuff on pre-SMPng from FreeBSD maillist (1)
- Fight Travel开发日志(6)
- linux的chmod与chown命令详解
- Trie树
- 【拉灯君第三弹】母函数-HDU1085-泰山下的AC
- 数据结构—单链表的部分基本操作(C语言)
- C#--第八周实验--任务2--设计结构和枚举,并测试
- 深入理解DB2缓冲池(BufferPool)
- linux的sh脚本编程
- Android文件存取
- [HDU-2602] 0-1背包
- 最近笔试面试没答全的题目总结
- 在xp下安装iis5.1注意事项
- poj2516----最小费用流(模版+构图)