⑴ C語言數據結構上機題
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode * next;
}LNode,* LinkList;
void CreateList(LinkList &L)//創建鏈表存放26個字母組成的線性表
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
char c='z';
for(int i=26;i>0;i--)
{
LNode *p;
p=(LinkList)malloc(sizeof(LNode));
p->data=c--;
p->next=L->next;
L->next=p;
}
}
bool ListInsert(LinkList &L,int i,char c)//在第i個位置插入字母c
{
LNode * p=L;int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return false;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=c;
s->next=p->next;
p->next=s;
return true;
}
void main()
{
LinkList L;
CreateList(L);//1.創建鏈表存放26個字母組成的線性表
char c;int i;
cout<<"輸入插入的字母"<<endl;
cin>>c;
cout<<"輸入插入的位置(整數)"<<endl;
cin>>i;
if(ListInsert(L,i,c))//在第i個位置插入字母c
{
while(L->next!=NULL)//將插入後的線性表輸出
{
cout<<L->next->data;
L=L->next;
}
}
}
//辛苦寫完...剛調試通過...加分啊..
調試是在C++環境下調試的,如果你要在C環境下..把
cout<<L->next->data; 改為:
printf("%d",L->next->data);
cin>>c;改為:scanf("%c",c);
就ok了......
ps: o_o一般上機都是C++吧......
⑵ 兩道C++數據結構題~!
以下所有程序均通過編譯與調試,應該沒問題
第一題是經典的廣度優先搜索問題,如果想要效率更高一點可以採用雙向廣度優先搜索,不過總共才9!=362880種狀態,沒太大必要,偷懶不寫了
#include <iostream>
#define MAXN 362880
const int ftl[]={40320,5040,720,120,24,6,2,1,1};//階乘
const int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
//約定用三行三列的二維數組表示一種狀態,其中用0表示空位
int Code(int a[3][3])//特定狀態轉化為編號
{
int A[9];
int i,j;
int ans;
ans=0;
for (i=0;i<9;i++) A[i]=a[i/3][i%3];
for (i=0;i<9;i++)
{
ans+=A[i]*ftl[i];
for (j=i+1;j<9;j++)
if (A[j]>A[i]) A[j]--;
}
return ans;
}
int head,tail;
int queue[MAXN][3][3];
int tar[3][3],tarid;
int pi[MAXN];//記錄隊列中各節點的前趨節點
bool hash[MAXN];
int length;
int path[MAXN];//記錄操作步驟
void Print(int i)//輸出步驟
{
int j,k;
length=0;
while (i!=-1)
{
path[length++]=i;
i=pi[i];
}
std::cout<<"Total steps: "<<length-1<<std::endl;
for (k=length-1;k>=0;k--)
{
std::cout<<"Step "<<length-k-1<<":"<<std::endl;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++) std::cout<<queue[path[k]][i][j]<<' ';
std::cout<<std::endl;
}
}
return;
}
int main()
{
int i,j,k;
for (i=0;i<9;i++) std::cin>>queue[0][i/3][i%3];//約定輸入時用0表示空格,讀取初始狀態
for (i=0;i<9;i++) std::cin>>tar[i/3][i%3];//讀取目標狀態
tarid=Code(tar);
pi[0]=-1;
memset(hash,true,sizeof(hash));
hash[Code(queue[0])]=false;
head=0;
tail=1;
while (head<tail && hash[tarid])
{
int x,y;//當前節點中空格的位置
for (i=0;i<9;i++)
if (queue[head][i/3][i%3]==0)
{
x=i/3;
y=i%3;
break;
}
for (i=0;i<4;i++)
{
int x2,y2,id;//新生成節點的空格位置以及編號
x2=x+dir[i][0];
y2=y+dir[i][1];
if (x2>=0 && x2<3 && y2>=0 && y2<3)
{
for (j=0;j<9;j++) queue[tail][j/3][j%3]=queue[head][j/3][j%3];
queue[tail][x][y]=queue[tail][x2][y2];
queue[tail][x2][y2]=0;
id=Code(queue[tail]);
if (hash[id])
{
hash[id]=false;
pi[tail]=head;
if (id==tarid) Print(tail);
tail++;
}
}
}
head++;
}
if (hash[tarid]) puts("No Solution!");
return 0;
}
第二題樓主的說明不是太明確,姑且做一些這樣的約定吧:
輸入數據的時候,不是直接輸入多項式,而是多項式的項數,之後跟著一組一組的(系數,指數)組,並且為了方便,所有的系數、指數都是整數
輸出按照多項式格式降冪輸出
比如這樣的輸入
4
1 5 3 6 -2 2 4 0
2
1 1 1 0
#include <iostream>
struct Node//鏈表節點,也就是多項式的項
{
int c;//系數
int e;//指數
Node *next;//下一項
Node()
{
next=0;
}
};
void Insert(Node *p,int c,int e)//按降冪插入一項到多項式中
{
Node *q;
if (c==0) return;
while (p->e>e)
{
q=p;
p=p->next;
}
if (p->e==e)
{
p->c+=c;
if (p->c==0)//刪除系數為0的項
{
q->next=p->next;
p->next=0;
delete p;
}
}
else
{
q->next=new Node;
q=q->next;
q->c=c;
q->e=e;
q->next=p;
}
return;
}
void Print(Node *p,bool first)//first為真表示p是多項式的第一項
{
if (p->e==0x80000000)
{
if (first) std::cout<<0;
std::cout<<std::endl;
}
else
{
if (!first && p->c>0) std::cout<<'+';
if (p->c!=1 && p->c!=-1) std::cout<<p->c;
else if (p->c==-1) std::cout<<'-';
if (p->e<0) std::cout<<'/';
if (p->e!=0)
{
std::cout<<'x';
if (abs(p->e)!=1) std::cout<<'^'<<abs(p->e);
}
Print(p->next,false);
}
return;
}
Node *p;//存放結果的鏈表
int main()
{
int n,c,e;
p=new Node;
p->c=1;
p->e=0x7FFFFFFF;
p->next=new Node;
p->next->c=1;
p->next->e=0x80000000;//設置指數很大和很小的兩項作哨
std::cin>>n;//讀取多項式1
while (n--)
{
std::cin>>c>>e;
Insert(p,c,e);
}
std::cin>>n;//讀取多項式2
while (n--)
{
std::cin>>c>>e;
Insert(p,c,e);
}
Print(p->next,true);
return 0;
}
⑶ 數據結構試題 求解 在線等 謝謝
1,CD 2,A 3,D 4,B 5,A, 6,A 7,B 8,C 怎麼全是棧和隊列的題啊
⑷ 3道數據結構編程題~~~
我只給你下思路,
1.你意思就是元素是按升序排的,可以先一個變數得到你順序表的首地址,之後一直和你要插入的元素比較大小,找到適當的位置後,就可插入
(1)
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100//表初始大小
typedef struct
{
int *elem;
int length;
}SqList; //順序表的結構
int main()
{
int i,j,k;
SqList sheet; //這里為了簡便直接賦值
sheet.elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int));
sheet.elem[0] = 1;//賦值
sheet.elem[1] = 2;
sheet.elem[2] = 4;
sheet.length = 3;
//如現在要插入一個3的元素
i = 3;
for(j=0;j<sheet.length;++j)
if(sheet.elem[j]>=i)
break; //找到了便退出
for(k=sheet.length-1;k>=j;--k) //將元素向後移一位
{
sheet.elem[k+1] = sheet.elem[k];
}
sheet.elem[j] = i; //插入元素
for(k=0;k<4;++k)
printf("%d ",sheet.elem[k]);
return 0;
}
(2)這里是寫個大概,具體要自己修改
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode //單鏈結構
{
int elem;
struct LNode *next;
}LinkList;
int main()
{
int i;
LinkList *link,*link2,*link3,*temp,*temp2,*temp3;//為簡便這也直接賦值
link = (LinkList*)malloc(sizeof(LinkList));
link2 = (LinkList*)malloc(sizeof(LinkList));
link3 = (LinkList*)malloc(sizeof(LinkList));
link->elem = 1; //鏈接起來
link->next = link2;
link2->elem = 2;
link2->next = link3;
link3->elem = 3;
link3->next = NULL;
//倒置
temp = link;
temp2 = link2;
temp3 = link3;
temp->next = NULL;
//這部分可放到循環中
while(1)
{
temp2->next = temp; //改變各結點的指向
temp = temp2;
if(temp3==NULL) break; //若這里temp3為空則要退出,具體為什麼自己想想
temp2 = temp3;
temp3 = temp3->next;
}
for(i=0;i<3;++i)
{
printf("%d ",temp2->elem);
temp2 = temp2->next;
}
return 0;
}
第三題其實也差不多,時間關系我不能再寫了,具體請你多看數據結構這本書,上面都有詳細說明的。
⑸ 數據結構題求答案
題號:1 題型:是非題 本題分數:5
內容:
鏈表是一種採用鏈式存儲結構存儲的線性表。
1、 錯
2、 對
標准答案:2
本題得分:5
題號:2 題型:是非題 本題分數:5
內容:
子串是主串中任意個連續字元組成的序列。
1、 錯
2、 對
標准答案:1
學員答案:2
本題得分:0
題號:3 題型:是非題 本題分數:5
內容:
順序存儲是一種隨機存取的數據結構。
1、 錯
2、 對
標准答案:2
本題得分:0
題號:4 題型:是非題 本題分數:5
內容:
兩個串相等的充要條件是串的長度相等和對應的字元相等。
1、 錯
2、 對
標准答案:2
本題得分:5
題號:5 題型:是非題 本題分數:5
內容:
棧是一種對所有插入、刪除操作限於在表的一端進行的線性表,是一種後進先出型的數據結構。
1、 錯
2、 對
標准答案:2
本題得分:5
題號:6 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:5
題號:7 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
設有兩個串p和q,求q在p中首次出現的位置的運算稱作()
A、求子串
B、串的復制
C、串的定位
D、串的比較
標准答案:C
本題得分:5
題號:8 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
以下哪一個不是隊列的基本運算?
A、從隊尾插入一個新元素
B、從隊列中刪除第i個元素
C、判斷一個隊列是否為空
D、讀取隊頭元素的值
標准答案:D
本題得分:0
題號:9 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
隊列中存取數據元素的原則是 ()
A、後進先出
B、先進先出
C、先進後出
D、隨意進出
標准答案:B
本題得分:5
題號:10 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:5
題號:11 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:5
題號:12 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
若進棧序列為a, b, c,則通過入出棧操作可能得到的a, b, c的可能的出棧序列有()種。
A、4
B、5
C、6
D、7
標准答案:A
本題得分:5
題號:13 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:0
題號:14 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:B
學員答案:B本題得分:5
題號:15 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:C
本題得分:0
題號:16 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
向一個有115個元素的順序表中插入一個新元素並保持原來順序不變,平均要移動()個元素。
A、15
B、57.5
C、115
D、116
標准答案:B
本題得分:5
題號:17 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
以下對循環鏈表的敘述錯誤的是()
A、單鏈表和雙向鏈表經首尾相接都可以形成循環鏈表
B、循環鏈表可以用頭指針表示,也可以用尾指針表示
C、從循環鏈表的任何一個結點出發都能訪問到表中的其他結點
D、構成循環鏈表需要增加存儲空間
標准答案:D
本題得分:0
題號:18 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:0
題號:19 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
圖形:
A、
B、
C、
D、
標准答案:D
本題得分:0
題號:20 題型:單選題(請在以下幾個選項中選擇唯一正確答案) 本題分數:5
內容:
對於只在表的首、尾進行插入操作的線性表,宜採用的存儲結構為:()
A、順序表
B、用頭指針表示的單循環鏈表
C、用尾指針表示的單循環鏈表
D、單鏈表
標准答案:C
本題得分:0
⑹ c語言編程 數據結構題
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#defineelemTypeint /*單鏈表元素數據類型*/
#defineLNODE_SIZEsizeof(structlNode) /*單鏈表結點空間大小*/
#definestatusint /*狀態型變數*/
#defineOVERFLOW-1 /*內存溢出狀態碼*/
#defineERROR0 /*錯誤狀態碼*/
#defineOK1 /*正確狀態碼*/
/*單鏈表數據結構*/
typedefstructlNode{
elemTypedata;
structlNode*next;
}lNode,*linkList;
/*初始化*/
/*操作結果:構造一個空的單鏈表L*/
voidinitList(linkList*L){
*L=(linkList)malloc(LNODE_SIZE);/*產生頭結點,並使L指向此頭結點*/
if(!*L)/*內存分配失敗*/
exit(OVERFLOW);
(*L)->next=NULL;/*指針域為空*/
}
/*銷毀*/
/*初始條件:單鏈表L已存在。操作結果:銷毀單鏈表L*/
voiddestroyList(linkListL){
linkListp,q;
p=L->next;/*p指向第一個結點*/
while(p){/*沒到表尾*/
q=p->next;
free(p);
p=q;
}
free(L);
}
/*判斷單鏈表是否為空*/
/*初始條件:單鏈表L已存在。操作結果:若L為空表,則返回TRUE,否則返回FALSE*/
intlistIsEmpty(linkListL){
returnL->next==NULL;
}
/*尋找指定特徵(compare)元素的位序*/
/*初始條件:線性表L已存在,compare()是數據元素判定函數(滿足為1,否則為0)*/
/*操作結果:返回L中第1個與e滿足關系compare()的數據元素的位序*/
/*若這樣的數據元素不存在,則返回值為0*/
intlocateElem(linkListL,elemTypee,status(*compare)(elemType,elemType)){
inti=0;
linkListp=L->next;
while(p){
i++;
if(compare(p->data,e))/*找到這樣的數據元素*/
returni;
p=p->next;
}
return0;
}
/*數據元素判定*/
/*滿足為1,否則為0*/
intcompare(elemTypedes,elemTypesrc){
returndes==src;
}
/*單鏈表指定位置插入新元素*/
/*操作結果:在帶頭結點的單鏈表L中第i個位置之前插入元素e*/
statuslistInsertNode(linkListL,inti,elemTypee){
intj=0;
linkListp=L,s;
while(p&&j<i-1){/*尋找第i-1個結點*/
p=p->next;
j++;
}
if(!p||j>i-1)/*插入位置不合理:i小於1或者大於表長*/
returnERROR;
/*生成新結點,並插入L中*/
s=(linkList)malloc(LNODE_SIZE);
if(!s)/*內存分配失敗*/
exit(OVERFLOW);
s->data=e;
s->next=p->next;
p->next=s;
returnOK;
}
/*刪除單鏈表指定位置元素*/
/*操作結果:在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值*/
statuslistDeleteNode(linkListL,inti,elemType*e){
intj=0;
linkListp=L,q;
while(p->next&&j<i-1){/*尋找第i個結點,並令p指向其前驅結點*/
p=p->next;
j++;
}
if(!p->next||j>i-1)/*刪除位置不合理:i小於1或者大於表長*/
returnERROR;
/*刪除並釋放結點*/
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
returnOK;
}
/*列印鏈表內容*/
/*初始條件:單鏈表L已存在。操作結果:當鏈表不為空時,列印鏈表內容並返回OK,否則返回ERROR*/
statusprintList(linkListL){
linkListp=L->next;/*p指向第一個結點*/
if(listIsEmpty(L)){
puts("Thelinklistisempty!");
returnERROR;
}
while(p){
printf("%d ",p->data);
p=p->next;
}
putchar(' ');
returnOK;
}
intmain(void){
linkListL;
elemTypee;
intindex;
/*初始化鏈表*/
initList(&L);
/*插入若干元素*/
listInsertNode(L,1,1);
listInsertNode(L,2,4);
listInsertNode(L,3,6);
listInsertNode(L,4,7);
listInsertNode(L,5,10);
printf("初始鏈表內容: ");
printList(L);
putchar(' ');
/*尋找數據為6的結點位置*/
index=locateElem(L,6,&compare);
printf("數據為6的結點位置: %d ",index);
putchar(' ');
/*在數據為6的結點之前插入數據為5的結點*/
listInsertNode(L,index,5);
printf("當前鏈表內容: ");
printList(L);
destroyList(L);
getch();/*屏幕暫留*/
return0;
}
⑺ 數據結構編程題
void quickpass(int r[], int s,int t)
{
int i=s, j=t, x=r[s];
while(i<j){
while (i<j &&r[j]>x) j=j-1; if (i<j) {r[i]=r[j];i=i+1;}
while (i<j && r[i]<x) i=i+1;if (i<j) {r[j]=r[i];j=j-1;}
}
r[i]=x;
}
⑻ 數據結構試題庫
網路文庫有好多呢,只要些積分就行了啊。
豆丁上面有更多,更專業的東西,但是需要掏錢,你自己選擇著看看吧。
豆瓣有討論組可以為你找到所有你想要的東西,但是得耐心的找相關的小組和人