一个有关C语言(数据结构)程序设计题 高手请帮忙,高分!

来自:    更新日期:早些时候
数据结构编程题(c语言)~

因为你这个题目是到所输入符号跟栈顶元素不匹配时才结束的.
所以用顺序栈有可能发生上溢现象,因此在这里我用链式栈来解决这个问题
代码如下:
#include
#include
#define len sizeof(stack)
typedef struct node
{
char c;
struct node* next;
}stack,*link;
link push(link s,char c); //进栈
link pop(link s); //出栈
int main ()
{
int flag=1; //初始化为1,表示输入的符号是匹配的
char c,top;
link s=NULL; //置空栈
while(1)
{
scanf("%c",&c);
switch(c)
{
case '[':
case '{':
case '(':
s=push(s,c);
break;
case ']':
case '}':
case ')':
top=s->c; //取得栈顶跟c比较
if((top=='['&&c==']')||(top=='{'&&c=='}')||(top=='('&&c==')')) //判断栈顶元素是否与c相同
s=pop(s);
else
flag=0; //不想同则改变标志flag的值
break;
}
if(!flag) //如果flag非真,则表示符号不匹配,显示相关信息并退出,否则继续输入
{
printf("符号不匹配!
");
break;
}
}
return 0;
}
link push(link s,char c)
{
link p;
p=(link)malloc(len);
//进栈操作其实用的就是不带头结点的头插法建立一个单链表
p->c=c;
p->next=s;
s=p; //更新栈顶
return s; //返回新栈顶
}
link pop(link s)
{
link p;
p=s; //保存原栈顶
s=s->next; //更新栈顶
free(p); //删除原栈顶
return s;
}

struct Node;
typedef struct Node *PNode;
struct Node //节点类型;
{
DataType info;
PNode link;
};
typedef struct Node *LinkList; //单链表类型



int insert_link(LinkList llist,DataType y,DataType x)
{
PNode p,q;
p=llist;
while(p!=null&&y!=p->info)
p=p->link;

if(p==null)
{
printf("The value of y is not in the link!");
return (0);
}

q=(PNode)malloc(sizeof(struct Node));
if(q==NULL)
{
printf("out of space!
");
return 0;
}
else
{
q->info=x;
q->link=p->link;
p->link=q;
return 1;
}
}



第二个问题:
struct SeqList
{
DataType element[100]; //存放线性表中的元素;
int n; //存放线性表中元素的个数;
};

typedef struct SeqList *PSeqList;//指向链表;


int find(PSeqList plist,DataType x)
{
int i;
int r=0;//存放x的个数;
for(i=0;in;i++)
if(plist->element[i]==x)r++;
return r;
}

#include <stdio.h>
#include <malloc.h>
#define INFINITY 32767
#define MAX_VEX 20 //最大顶点个数
#define QUEUE_SIZE (MAX_VEX+1) //队列长度
bool *visited; //访问标志数组
//图的邻接矩阵存储结构
typedef struct{
char *vexs; //顶点向量
int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
}MGraph;
//队列类
class Queue{
public:
void InitQueue(){
base=(int *)malloc(QUEUE_SIZE*sizeof(int));
front=rear=0;
}
void EnQueue(int e){
base[rear]=e;
rear=(rear+1)%QUEUE_SIZE;
}
void DeQueue(int &e){
e=base[front];
front=(front+1)%QUEUE_SIZE;
}

public:
int *base;
int front;
int rear;
};

//图G中查找元素c的位置
int Locate(MGraph G,char c){
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==c) return i;
return -1;
}

//创建无向网
void CreateUDN(MGraph &G){
int i,j,w,s1,s2;
char a,b,temp;
printf("输入顶点数和弧数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
temp=getchar(); //接收回车
G.vexs=(char *)malloc(G.vexnum*sizeof(char)); //分配顶点数目

printf("输入%d个顶点.\n",G.vexnum);
for(i=0;i<G.vexnum;i++){ //初始化顶点
printf("输入顶点%d:",i);
scanf("%c",&G.vexs[i]);
temp=getchar(); //接收回车
}

for(i=0;i<G.vexnum;i++) //初始化邻接矩阵
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=INFINITY;
printf("弧的输入方法:1 2 1\n");
printf("输入%d条弧.\n",G.arcnum);
for(i=0;i<G.arcnum;i++){ //初始化弧
printf("输入弧%d:",i);
scanf("%c %c %d",&a,&b,&w); //输入一条边依附的顶点和权值
temp=getchar(); //接收回车
s1=Locate(G,a);
s2=Locate(G,b);
G.arcs[s1][s2]=G.arcs[s2][s1]=w;
}
}

//图G中顶点k的第一个邻接顶点
int FirstVex(MGraph G,int k)
{
int i;
if(k>=0 && k<G.vexnum){ //k合理
for(i=0;i<G.vexnum;i++)
if(G.arcs[k][i]!=INFINITY) return i;
}
return -1;
}

//图G中顶点i的第j个邻接顶点的下一个邻接顶点
int NextVex(MGraph G,int i,int j)
{
int k;
if(i>=0 && i<G.vexnum && j>=0 && j<G.vexnum)
{ //i,j合理
for(k=j+1;k<G.vexnum;k++)
if(G.arcs[i][k]!=INFINITY)
return k;
}
return -1;
}

//深度优先遍历
void DFS(MGraph G,int k)
{
int i;
if(k==-1){ //第一次执行DFS时,k为-1
for(i=0;i<G.vexnum;i++)
if(!visited[i]) DFS(G,i); //对尚未访问的顶点调用DFS
}
else{
visited[k]=true;
printf("%c ",G.vexs[k]); //访问第k个顶点
for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i))
if(!visited[i]) DFS(G,i); //对k的尚未访问的邻接顶点i递归调用DFS
}
}

//广度优先遍历
void BFS(MGraph G){
int k;
Queue Q; //辅助队列Q
Q.InitQueue();
for(int i=0;i<G.vexnum;i++)
if(!visited[i]){ //i尚未访问
visited[i]=true;
printf("%c ",G.vexs[i]);
Q.EnQueue(i); //i入列
while(Q.front!=Q.rear){
Q.DeQueue(k); //队头元素出列并置为k
for(int w=FirstVex(G,k);w>=0;w=NextVex(G,k,w))
if(!visited[w]){ //w为k的尚未访问的邻接顶点
visited[w]=true;
printf("%c ",G.vexs[w]);
Q.EnQueue(w);
}
}
}
}
//主函数
void main()
{
printf("无向图的的深度优先遍历和广度优先遍历!\n");
int i;
MGraph G;
CreateUDN(G);
visited=(bool *)malloc(G.vexnum*sizeof(bool));
printf("\n深度优先遍历: ");
for(i=0;i<G.vexnum;i++)
visited[i]=false;
DFS(G,-1);
printf("\n广度优先遍历: ");
for(i=0;i<G.vexnum;i++)
visited[i]=false;
BFS(G);
printf("\n");
}
在VC6.0下编译通过


一个有关C语言(数据结构)程序设计题 高手请帮忙,高分!视频

相关评论:
  • 13752189595一个c语言程序是由什么组成的
    季侵冯1、广泛性。C语言的运算范围的大小直接决定了其优劣性。C语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。2、简洁性。9类控制语句和32个KEYWORDS是C语言所...

  • 13752189595一个c语言程序是由什么组成的
    季侵冯所有编程语言本质上都是由算法+数据结构组成的。一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的函数,main()函数又称为主函数。C语言源程序的次要构成成分有:编译预处理命令、注释和声明。主函数被编译程序翻译成一个机器语言形式的主程序段,任何其他函数都将被...

  • 13752189595C语言程序设计与数据结构内容简介
    季侵冯第2章专门探讨C语言的数据结构,涵盖了各种运算符和表达式的使用,让读者掌握C语言的运算逻辑。这一章的学习将有助于理解程序中的算术和逻辑操作。第3章聚焦于程序控制语句,讲解如何通过条件语句、循环语句等控制程序的流程,实现复杂的逻辑控制。这是编程中至关重要的一部分。第4章深入解析数组,这是...

  • 13752189595(C语言,数据结构)判别一个数是否在序列中,在,就删除,不在,输出NO_百度...
    季侵冯include<iostream>using namespace std;struct node{ int date; node *next;};typedef node *link;int main(){ int n; int num_[8] = {1,2,3,4,5,6,7,8}; \/\/建立链表 link p,q; link head = new node; head->date = num_[0]; head->next = NULL; p = head; for(int ...

  • 13752189595c语言程序开发需要哪些步骤?
    季侵冯开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。C语言程序可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。1、预处理:输入源程序并保存(.C文件)。2、编译:将源程序翻译为目标文件(.OBJ文件)。...

  • 13752189595开发一个c语言程序要经过哪四个步骤
    季侵冯开发一个C语言程序要经过以下四个步骤:需求分析、设计、编码和测试。需求分析:这是开发任何软件项目的第一步,包括C语言程序。在这个阶段,开发人员需要明确程序的目的、功能需求、用户接口需求等。例如,如果要开发一个计算器程序,需求分析可能包括确定程序需要支持哪些运算(加、减、乘、除等)、是否...

  • 13752189595数据结构和c语言是什么关系
    季侵冯数据结构和C语言没有任何关系!!数据结构就是一种应用、一个目的,C语言就是实现这种应用的一种工具而已,C语言不仅可以用来实现数据结构,他还有其他作用。现在大多数通用编程语言都可以用来实现数据结构,因此数据结构用许多版本,有C语言,C++语言,Java语言等等。这些语言实现数据结构的思想是一样的,...

  • 13752189595C语言程序:已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其 ...
    季侵冯include main(){int i,max,a[10];printf("输入十个同学的成绩:");for(i=0;i<=9;i++)scanf("%d",&a[i]);max=0;for(i=0;i<=9;i++)if(a[i]>max)max=a[i];printf("最好成绩为:%d",max);}希望对楼主有帮助,

  • 13752189595数据结构与c语言是什么关系
    季侵冯C语言是一种编程的语言,编程的语言有很多种。数据结构则是讲的是关于一些数据的理论知识。不管什么编程语言都能用到数据结构的知识,数据结构是程序设计基础又核心的知识。可以将c语言想象为一种语言,数据结构就是一种说话的技巧,如何使说话更简洁,有逻辑,容易让人听懂,这表达技巧不管用中文或者英语...

  • 13752189595一个完整的C程序由什么组成?
    季侵冯C语言的构成如下:1、数据类型 C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。2、常量与变量 常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网