我正在C中构建一个程序,我想从0-20中插入100个随机值到链接列表中。之后,我希望将这些值按照插入到列表中的相同顺序压入堆栈。有人能指点我吗?将链接列表中的值插入堆栈
我的代码:
#include <stdio.h>
#include <stdlib.h>
struct listNode{
int data;
struct listNode * nextPtr;
};
struct stackNode {
int data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode* StackNodePtr;
typedef struct listNode ListNode;
typedef ListNode * ListNodePtr;
void push(StackNodePtr *topPtr, int info);
void printStack(StackNodePtr currentPtr);
void insert(ListNodePtr *, int);
void printList(ListNodePtr);
int main(void)
{
ListNodePtr startPtr=NULL;
ListNodePtr startPtr1=NULL;
StackNodePtr stackPtr = NULL;
int item, i;
for(i=0;i<100;i++)
{
item = rand() % 20;
insert(&startPtr,item);
}
printList(startPtr);
while(startPtr){
push(&stackPtr,startPtr->data);
startPtr=startPtr->nextPtr;
}
printStack(stackPtr);
system("PAUSE");
return 0;
}
void insert(ListNodePtr *sPtr,int value)
{
ListNodePtr newPtr,previousPtr,currentPtr;
newPtr = (ListNodePtr)malloc(sizeof(ListNode));
if(newPtr!=NULL){
newPtr->data=value;
newPtr->nextPtr=NULL;
previousPtr=NULL;
currentPtr=*sPtr;
while(currentPtr!=NULL && value>currentPtr->data){
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(previousPtr==NULL){
newPtr->nextPtr=*sPtr;
*sPtr=newPtr;
}
else{
previousPtr->nextPtr=newPtr;
newPtr->nextPtr=currentPtr;
}
}
else
printf("%d not inserted! No memory!\n",value);
}
void printList(ListNodePtr c)
{
if(c==NULL){
printf("List is empty\n");
}else{
printf("The List is:\n");
while(c!=NULL){
printf("%d --> ",c->data);
c=c->nextPtr;
}
printf("NULL\n\n");
}
}
void push(StackNodePtr *topPtr, int info) {
StackNodePtr newPtr;
newPtr=malloc(sizeof(StackNode));
if(newPtr!=NULL) {
newPtr->data=info;
newPtr->nextPtr=*topPtr;
*topPtr=newPtr;
} else
printf("%d not inserted. No "
"memory.\n", info);
}
void printStack(StackNodePtr currentPtr) {
if (currentPtr == NULL) {
printf("Stack is empty.\n\n");
} else {
printf("The stack is:\n");
while (currentPtr != NULL) {
printf("%d --> ", currentPtr->data);
currentPtr = currentPtr->nextPtr;
}
printf("NULL\n\n");
}
}
其实我这样做,现在无论整数插入它插入堆栈以及列表中,但以相反的顺序。
i。从0-20在链接列表中插入件100个的随机值..现在我想要被插入在相同的顺序具有相同的值成可经由堆栈:
用于初始化随机整数的数组编号推送功能.. – user3277037
你的问题是什么?你面临的问题是什么? – Wajahat
你的代码不会创建0..20的随机链表;他们从0..18。也就是说,抛出第二个for循环,并将栈push()调用移动到与列表insert()相同的循环体中。假设你的职能真的有效,那我留给你解决,如果他们不这样做的话。代码中其他许多错误的东西与你的问题不同,这个问题起初有点模糊。 – WhozCraig