《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现》的c语言代码

如题所述

第1个回答  推荐于2017-11-26
链表

#include"stdio.h"
#include"malloc.h"
typedef struct node
{
int data;
struct node *next;
}node,*linklist;
int initlist(linklist l)
{
linklist q,p;
int i,n;
q=l;
printf("请输入链表长度:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=(linklist )malloc(sizeof(node));
printf("请输入链表数字:");
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next=NULL;
return 1;
}
int printflink(linklist l)
{
linklist p;

p=l->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
return 1;
}
int insertlink(linklist l)
{
linklist p,s;
int j=0,i,n;
p=l;
printf("请输入你要插入的位置:");
scanf("%d",&i);
printf("请输入插入的数字:");
scanf("%d",&n);
while(p->next!=NULL&j<i-1)
{
p=p->next;
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,q;
int j=0,e,i;
p=l;
printf("请输入你要删除的位置:");
scanf("%d",&i);
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(!(p->next)||j>i-1)
{
printf("error\n");
return 1;
}
q=p->next;
p->next=q->next;
free(q);
return 1;
}
int main()
{
linklist l;

l=(linklist)malloc(sizeof(node));
l->next=NULL;
initlist(l);
printflink(l);
insertlink(l);
printflink(l);
deletelink(l);
printflink(l);
return 1;
}


#include"iostream.h"
#include"stdio.h"
#include"malloc.h"

typedef int elementype;
#define MAXSTACK 100
typedef struct stack
{
elementype *base;
elementype *top;
int stacksize;
}stack;
//建栈
int initstack(stack *p)
{
p->base=(elementype *)malloc(MAXSTACK*sizeof(elementype));
if(!p->base)
{
cout<<"建立栈失败!"<<endl;
return 1;
}
p->top=p->base;
return 1;

}
//元素进栈
int pushstack(stack *p)
{

elementype e;
if(p->top-p->base>=p->stacksize)
{
cout<<"栈已满!"<<endl;
return 1;
}
cout<<"请输入进栈元素:";
cin>>e;

*p->top=e;
p->top++;
return 1;

}

//删除栈顶元素
int deletetop(stack *p)
{
if(p->top==p->base)
{
cout<<"栈为空"<<endl;
return 1;
}
p->top--;
return 1;
}

//显示栈中元素
int displaystack(stack *p)
{
int i=0;
elementype *s;
if(p->top==p->base)
{
cout<<"栈为空!"<<endl;
return 1;
}
s=p->base;
for(i=0;i<p->top-p->base;i++)
{

cout<<*s<<" ";
s++;
}
cout<<endl;
return 1;
}
int main()
{
stack *p;
int a;
initstack(p);
displaystack(p);
pushstack(p);
displaystack(p);
deletetop(p);
displaystack(p);

}
队列
#include"stdio.h"
#include"malloc.h"
typedef struct lnode
{
int data;
struct lnode *next;
}lnode;
typedef struct linkque
{
lnode *front;
lnode *rear;
}linkque;
int queinit(linkque *q)
{
int e;
lnode *p;

q->front=(lnode *)malloc(sizeof(lnode));
q->rear=q->front;
q->front->next=NULL;
while(1)
{
printf("请输入队列数字(输入0结束):");
scanf("%d",&e);
if(e==0) break;
p=(lnode *)malloc(sizeof(lnode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
return 1;
}
int quein(linkque *q)
{
lnode *p;
int e;
printf("请输入你要插入队列的数字:");
scanf("%d",&e);
p=(lnode *)malloc(sizeof(lnode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
return 1;
}
int quedel(linkque *q)
{
lnode *p;
int e;
p=q->front->next;
e=p->data;
q->front->next=p->next;
free(p);
return e;
}
int printfque(linkque *q)
{
lnode *p;
p=q->front->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
linkque q;
queinit(&q);
printfque(&q);
quein(&q);
printfque(&q);
quedel(&q);
printf("队列出列后为:\n");
printfque(&q);
return 1;
}本回答被提问者采纳

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
} cout<<"请输入要删除学生的学号:"; cin>>num; for(p1=head;p1!=NULL;) { if(p1->num==num)\/\/找到 { if(p1==head)\/\/要删除的结点是头结点 { head=p1->next; } else { p2->next=p1->next; } cout<<"成功删除!!"; } p2=p1; p1=p1->next; } return head;}int save_info(char *...

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

c语言 链表操作:建立,显示及节点的插入,删除
\/\/ 初始条件:线性表L已存在。操作结果:返回L中数据元素个数 int i=0;LinkList p=L->next; \/\/ p指向第一个结点 while(p) \/\/ 没到表尾 { i++;p=p->next;} return i;

线性表先插入再删除的算法 C语言
\/\/数序表存储 include<iostream> include"stdio.h"include"malloc.h"using namespace std;define maxsize 1024 typedef struct sequenlist { char data[maxsize];int last;}sequenlist;int insert(sequenlist *L,char x,int i){ int j;if(L->last==maxsize-1){ cout<<"overflow"<<endl;return...

用C语言头插法或尾插法建立带头结点的单链表,实现单链表上的插入,删除...
\/* 初始条件:顺序线性表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...

如何用C语言创建一个链表,实现增、删、改、查?
\/\/1、写出建立一个带头结点的线性链表的函数,其中每个结点包括学号、姓名、分数三个数据域。函数形式如下:NODE *creat_link(int direction){ NODE *head,*p,*tail;int xh,i=1;if(direction==1) \/\/当direction的值为1时,新建立的结点连到尾部 { tail=head=(NODE *)malloc(sizeof(NODE));h...

中国地质大学(武汉)的地理信息系统的研究生初试考哪些内容啊_百度知 ...
1、 熟练掌握线性表(包括顺序表及链表)结构的定义、特点、存储及主要操作算法(如创建、销毁、插入、删除、合并、拆分等),并能应用线性表结构求解问题;2、 熟练掌握栈及队列结构的定义、特点、存储、主要操作算法及应用,并能应用栈和队列求解问题;3、 熟练掌握简单排序算法(包括起泡排序、直接选择排序、直接插入排序...

全国计算机等级考试二级公共基础知识总结
一、基本数据结构与算法 1.算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。2.数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。3.线性表的定义;线性表的顺序存储结构及其插入与删除运算。4.栈和队列的定义;栈和队列的顺序存储结构及其基本...

2022年山东大学“832计算机综合”考哪些内容?
2.线性表的插入、删除、合并等基本操作实现方法 3.遍历器的作用、实现方法和应用 4.线性表结构应用:箱子排序、基数排序、并查集(在线等价类)等 (四)数组和矩阵 1.一般矩阵存储方法和基本运算实现 2.特殊矩阵的特征、存储方法和基本运算实现 3.稀疏矩阵的存储方法和基本运算实现 (五)栈 1.栈的基本概念、基本操作...

考研数据结构怎么复习?
1、看清华大学出版社 严蔚敏 《数据结构》的教材,C语言版本,这个是最基本的。清华大学计算机考硕士、博士都是考这本书,也是考研官方推荐的教材。数据结构有些是C++语言描述的,有些是JAVA语言描述的,如果你报考的高校没有特别要求,一般就用严的C语言版本的教材。2、买一本专门的考研数据结构科目的...

相似回答