博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性表----单链表
阅读量:6990 次
发布时间:2019-06-27

本文共 3268 字,大约阅读时间需要 10 分钟。

一,实验内容:链表的创建、插入与删除操作

二.程序清单

三.思考

l.如果需要将新结点 插入  到     第i个数据元素之后,算法将如何改动?

 

2. 双向链表和循环链表的定义和构造方法。

 

 

//链表的创建及插入、删除操作#include "stdio.h"#include"stdlib.h"#define NULL 0#define error  0#define ok 1#define overflow -2#define infeasible -1//类型定义typedef  int  Status;typedef  int  ElemType;//定义链表的存储结构typedef struct LNode{
int data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; //链表的类型Status GetElem_l(LinkList L, int i , ElemType &e)//L为带头结点的单链表,当第i 个元素存在时,其值赋给e.{
int j;LinkList p ;p=L->next; j=1;while(p&&j
next; ++j;}if(!p||j>i) return error;e=p->data;return ok;}//逆序创建链表 void CreatList_L1(LinkList &L,int n) //n为元素个数,L为头结点 {
int i; LinkList p; L=(LinkList)malloc(sizeof(LNode)); //生成头结点 L->next=NULL; for(i=n;i>0;i--) //链头插入法 { p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=L->next; L->next=p; } }//正序创建单链表void CreatList_L2(LinkList &L,int n ) ///n为元素个数,L为头结点{
int i ; LinkList p,q; L=(LinkList )malloc(sizeof(LNode));q=L;for(i=0;i
data); q->next=p; q=p; }q->next=NULL;}//输出链表void print(LinkList L){LinkList p; p=L->next; while(p) {printf("%d ",p->data); p=p->next; }}//链表的插入操作int ListInsert(LinkList &L,int i,int e){LinkList p,s;int j; p=L;j=0; while(p&&j
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; }//链表的删除操作 int ListDelete(LinkList &L,int i,int &e) {LinkList p,q; int j; p=L; j=0; while(p->next&&j
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 sortlinklist(LinkList &L){LinkList p,q,r; ElemType t;p=L->next; //p指向链表第一个元素结点while(p->next!=NULL) {q=L->next; //q指向链表第一个元素结点 while(q->next!=NULL) {r=q->next; if(q->data>r->data) //相邻两个元素比较、交换 {t=q->data; q->data=r->data; r->data=t; } q=q->next; } p=p->next; }return ok ;}void mergelist_l(LinkList la, LinkList &lb, LinkList &lc){LinkList pa,pb,pc; pa=la->next; pb=lb->next ; lc=pc=la;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;free(lb);}//主函数通过调用创建、插入、删除用输出函数完成链表的基本操作int main(){LinkList L1,L2,L3; int n,ins,del,i;//创建一个先进先出单链表 printf("please input FIFo linklist's node number n:\n"); scanf("%d",&n); printf("please input the linklist %d nodes data \n",n); CreatList_L2(L2,n); print(L2); printf("\n");//创建一个后进先出单链表printf("please input LIFO linklist's node number n:\n"); scanf("%d",&n); printf("please input the linklist %d nodes data \n",n); CreatList_L1(L1,n); print(L1); printf("\n");//对链表进行插入操作 printf("please input the insert node's locate i and value e\n"); scanf("%d%d",&i,&ins); ListInsert(L1,i,ins); print(L1); printf("\n"); //对链表进行删除操作 printf("please input the delete node's locate i\n"); scanf("%d",&i); ListDelete(L1,i,del); print(L1); printf("\n%d\n",del);//对链表进行排序sortlinklist(L1);printf("\n the L1 list's sort is:\n");print(L1);printf("\n the L2 list's sort is:\n");sortlinklist(L2);print(L2);//对链表进行合并printf("\n the merge result is : \n" );mergelist_l(L1,L2,L3);print(L3); }

 

转载于:https://www.cnblogs.com/java2016/p/7636126.html

你可能感兴趣的文章
java Webservice(一)HttpClient使用(一)
查看>>
cookie (储存在用户本地终端上的数据)
查看>>
你真的会玩SQL吗?之逻辑查询处理阶段
查看>>
用字体制作小图标
查看>>
python之函数用法startswith()
查看>>
while(scanf("%d",&n)!=EOF)与while(cin>>n)
查看>>
BigTale
查看>>
UITabBarController 笔记(一)AppDelegate中加UITabBarController 为 rootViewController
查看>>
oracle基础备份和还原
查看>>
Velocity 语法示例
查看>>
golang的ssh例子
查看>>
【python】pymongo中正则查询时的转义问题
查看>>
立足“快时尚”,联想笋尖S90怎样诠释“比美更美”?
查看>>
linux下执行strlwr函数出错:ld returned 1 exit status
查看>>
WSADATA
查看>>
各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
查看>>
html 跳转页面,同时跳转到一个指定的位置
查看>>
solr的suggest模块
查看>>
SWT中ole/activex实践--操作word的一个例子
查看>>
Volley(二)—— 基本Request对象 & RequestQueue&请求取消
查看>>