数据结构题?
我很懒 2009-11-01 03:25:39 1. 如果采用一运算数栈和一运算符栈来计算由键盘输入的中缀表达式1+((2+3)*4+5)*9/(5-(6+7)*8)#的值,这里运算数栈用来存放计算过程中使用或产生的运算数,运算符栈用来存放尚未用于计算的运算符,那么按照算法,请将当运算数栈第一次在栈顶出现13时各栈中存放的数据情况填入下表。另外,请写出该中缀表达式对应的后缀表达式: .
13
15
8
11
16
18
5
运算数栈
2. 画出稀疏矩阵A的三元组表和十字链表。
3. 已知广义表为((), ‘a’, (2,(‘c’,5,8)));试画出该广义表的存储表示。
a 0 1 2 3 4 5 6 7 8
data 60 56 42 38 12 74 25 20
link 4 3 7 -1 2 8 -1 1 6
4. 在下面数组a中链接存储着一个线性表,其表头“指针”为head==0,可利用空间表第一个元素的“指针”av==5:
a 0 1 2 3 4 5 6 7 8
data 88 56 42 38 78 74 66 20
link 4 2 1 5 6 8 7 3 7
现在依次进行如下操作:1) 在元素56前插入元素78;2)删除元素60;3)删除25;4)在元素56后插入66;5)在元素66前插入88。请问,在进行上面操作后,av== 6 ,并将此时数组a的内容填入下表:
一. 程序填空(22分)
1. 下面是某种线性表类的定义和实现(仅给出了部分操作)。函数DE()是用来判断线性表是否对称(即线性表 满足 , )。试在程序的每一划线部分填入一条语句或表达式, 完成函数DE()。
typedef struct Node {
int data;
struct Node *next, *prev;
}Node, * List;
void InitList (List &L) //初始化线性表L
{
L = (List) malloc(sizeof(Node));
L->next = L; L->prev = L;
}
void DestroyList(List &L) //销毁线性表L
{
Node *p, *q ; q = L->prev;
while(___①_________________){ p = q; q = q->prev; free(p);}
free(L);
}
bool DE(List &L) //判断线性表L对称否
{
Node *p, *q;
② ______________ ;
q = L ->prev;
while(p->data == q->data) {
if (p==q || ③ ________________ ) return TRUE;
else { ④ ________ ; ⑤ _____________ ; }
}
return FALSE;
}
2. 下面是仅给出了部分操作某线性表类的定义和实现。试在程序的每一划线部分填入一条语句或表达式,完成相应的操作。
typedef node {
int elem;
struct node *next;
}node,*LinkListPtr;
typedef struct {
LinkListPtr head,tail;
LinkListPtr curr;
} LinkList;
void InitLinkList(LinkList &L) //初始化线性表
{
L.head = (node *)malloc(sizeof(node));
if(L.head == NULL){cout < <"Insufficient memory available\n" ;exit(0);};
L.tail = L.head; L.curr = L.head;
}
void insert(LinkList &L,int & item) //在表L的当前位置处插入元素item
{
if(L.curr == NULL){cout < <"Current position is not a legal position\n";exit(0); };
node * newnode = (node *)malloc(sizeof(node));
if(newnode == NULL){cout < <"Insufficient memory available\n" ;exit(0);};
newnode->elem=item;
⑥___ ;
⑦ ;
if (L.tail == L.curr) L.tail = L.curr->next;
}
void setFirst(LinkList &L) //将表的当前位置定位于第1个元素
{
⑧ ;
}
int currValue(LinkList &L) //将表的当前位置的元素值返回
{
if(!isInList(L))
{
cout < <"Current position is not a legal position\n";exit(0);
}
return ⑨ ;
}
bool isEmpty(LinkList &L) //判断线性表是否为空
{
⑩ ;
}
bool isInList(LinkList &L) //判断curr是否在表中
{
return (L.curr != NULL) && (L.curr->next != NULL) && (!isEmpty(L));
}
bool find(LinkList &L ,const int & eval) //从表的当前位置开始查找元素eval
{
while (isInList(L))
if ( ⑾ ) return TRUE;
else L.curr = L.curr->next;
return FALSE;
}