用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找

如题所述

第1个回答  推荐于2016-10-19
#include <stdio.h>
#include <stdlib.h>

typedef struct LNode{
int data; //链表数据
struct LNode* next; //链表指针
}LNode,*LinkList;

/*头插法-建立单链表*/
LinkList HeadCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode)); //建立头结点
la->next=NULL;
scanf("%d",&num);
while(num!=10)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
p->data=num;
p->next=la->next;
la->next=p;
scanf("%d",&num);
}
return la;
}

/*尾插法-建立单链表*/
LinkList TailCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode));
la->next=NULL;
LinkList s,r=la;
scanf("%d",&num);
while(num!=10)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=num;
r->next=s;
r=s;
scanf("%d",num);
}
r->next=NULL;
return la;
}

/*单链表遍历*/
void TravelList(LinkList la)
{
LinkList p=la->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("\n");
}

/*单链表的按位查找*/
LinkList GetElem(LinkList la,int i)
{
int j=1;
LNode* p=la->next;
if(i<1)
return NULL;
while(p && j<i)
{
p=p->next;
j++;
}
return p;
}

/*单链表的按值查找*/
LinkList LocalElem(LinkList la,int e)
{
LNode* p=la->next;
while(p!=NULL && p->data!=e)
p=p->next;
return p;
}

/*单链表插入操作*/
bool InsertList(LinkList la,int i,int e)
{
//在la链表中的i位置插入数值e
int j=1;
LinkList p=la,s;
while(p && j<i)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if((s=(LinkList)malloc(sizeof(LNode)))==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}

/*单链表删除操作*/
bool DeleteList(LinkList la,int i)
{
int j=1;
LinkList p=la,q;
while(p && j<i) //p指向第i-1个元素
{
p=p->next;
j++;
}
if(p==NULL || p->next==NULL) //表示不存在第i-1个和第i的元素
return false;
q=p->next;
p->next=q->next;
free(q);
return true;
}

/*单链表的表长*/
int LengthList(LinkList la)
{
int nLen=0;
LinkList p=la->next;
while(p)
{
p=p->next;
nLen++;
}
return nLen;
}

/*单链表逆置*/
LinkList Reserve(LinkList la)
{
if(la==NULL || la->next==NULL)
return la;
LinkList p=la->next,q=p->next,r=q->next;
la->next=NULL;
p->next=NULL;
while(r!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
q->next=p;
la->next=q;
return la;
}

int main()
{
LNode la;
LinkList p;
p=HeadCreate(&la); //头插法创建单链表
TravelList(p);
printf("%p\n",GetElem(p,1)); //获得第1个结点地址
InsertList(p,2,10); //在链表的第2个位置插入元素10
TravelList(p);
DeleteList(p,3); //删除链表的第3个元素
TravelList(p);
printf("%d\n",LengthList(p)); //获得链表长度
p=Reserve(p);
TravelList(p);
return 0;
}

//运行结果
//5 6 12 7 8 14 9 3 2 5 14 10 头插法创建链表
//14->5->2->3->9->14->8->7->12->6->5-> 显示链表
//00382490 第一个结点的地址
//14->10->5->2->3->9->14->8->7->12->6->5-> 插入元素值为10的结点
//14->10->2->3->9->14->8->7->12->6->5-> 删除第三个结点
//11 获得链表长度
//5->6->12->7->8->14->9->3->2->10->14-> 链表逆置
//Press any key to continue

这是我写的一个线性表链式存储的综合程序,包含了你所要的创建、删除、插入、按值查找的功能,还有一些额外的功能。下面加注释的是程序运行结果,你可以参考试着改改程序,让程序更加完美。希望对你有帮助,呵呵!本回答被提问者采纳

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
\/*单链表插入操作*\/ bool InsertList(LinkList la,int i,int e){ \/\/在la链表中的i位置插入数值e int j=1;

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
STUDENT* create_linkbyfile(char *filename)\/\/功能:读取文件,创建链表\/\/参数:如果filename不为空,则打开该文件,如果filename为空,要求输入文件位置\/\/创建的链表的所有结点的next全部修改,指向物理地址上的下一个结点{ system("cls"); FILE *fp; STUDENT *head,*ptemp,*pnew; head=NULL;\/\/初始化head为空 ...

如何用C语言创建一个链表,实现增、删、改、查?
\/\/该函数能输出head所指的链表的所有结点值,输出形式如下:\/*本函数输出线性表sq中所有数据,形式如下:学号 姓名 分数

c语言 链表操作:建立,显示及节点的插入,删除
\/\/ 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L LinkList p;int i;L = (LinkList)malloc(sizeof(LNode));L->next = NULL; \/\/ 先建立一个带头结点的单链表 for (i=n; i>0; --i){ p = (LinkList)malloc(sizeof(LNode)); \/\/ 生成新结点 p->data =...

...实现单链表上的插入,删除计数,查找,修改,输出等操作,
\/* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 *\/ Status ClearList(LinkList *L){ LinkList p,q;p=(*L)->next; \/* p指向第一个结点 *\/ while(p) \/* 没到表尾 *\/ { q=p->next;free(p);p=q;} (*L)->next=NULL; \/* 头结点指针域为空 *\/ return...

《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现...
printf("请输入插入的数字:");scanf("%d",&n);while(p->next!=NULL&jnext;j++;} if(!(p->next)||j>i-1){ printf("error\\n");return 1;} s=(linklist)malloc(sizeof(node));s->data=n;s->next=p->next;p->next=s;return 1;} int deletelink(linklist l){ linklist p...

c数据结构 实现单链表的创建、插入、删除、打印和查询
cout<<"您查找的数据不在线性表中."<<endl;return l;} link * del(link *l, int i){ link *p,*s;p=get(l,i-1);if(p==NULL)cout<<"输入有误"<<endl;else { s=p->next;p->next=s->next;free(s);} return l;} link * add(link *l ){ link *p,*s;cout<<"请输入...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
一、单链表的建立 有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储...

数据结构代码(用C语言) 单链表的插入和删除
int j=0;while(NULL != p){ p = p->pstnext;j++;} printf("%d\\r\\n", j);} \/\/链表按值查找 void research_Date(Node *head, int date){ Node *p;int n=1;p = head->pstnext;while(NULL != p && date != p->nDate){ p = p->pstnext;++n;} if(NULL == p)...

线性表的基本操作c语言实现
SeqList* list = SeqList_Create(5);\/\/创建线性表 int i = 6;\/\/赋值6个变量,已超过线性表最大值 5 int j = 1;int k = 2;int x = 3;int y = 4;int z = 5;int index = 0;SeqList_Insert(list, &i, 7);\/\/将这6个变量插入线性表中 SeqList_Insert(list, &j, 0);Seq...

相似回答